知識鋪: 致力於打造輕知識點,持續更新每次的知識點較少,閱讀不累。不佔太多時間,不停的來喚醒你記憶深處的知識點。算法
GC算法
學習
1.標記清除算法3d
優缺點:不須要額外空間,可是遍歷空間花費大,並且會產生大量內存碎片
對象
2.複製收集算法blog
佔用兩塊同樣大內存,每次只用使用一塊。當須要發生複製的時候,遍歷一遍可達對象,進行復制到另一塊內存中。From區轉移到To區,或把一下gc次數超過閾值的,轉移大Old區。原先的From區,整個清空。ip
優勢:只須要遍歷一遍內存
缺點:複製成本巨大、佔用內存多
開發
3.標記整理算法get
3.1 採用標記-清除算法同樣的方式進行對象的標記zsh
3.2 採用複製清除算同樣將全部的存活對象往左端空閒空間移動
3.3 在一塊內存上操做,避免產生碎片
優缺點:相對標記清除來講,沒有了內存碎片,可是遍歷花費仍然很大。
4. GC根據堆內存空間不一樣區域,採用不一樣的算法回收
4.1 Young區: 複製收集算法
緣由:對象較少,複製代價小
4.2 老區和方法區:標記清除或標記整理算法
緣由:對象存活較多,次數少,較慢
其餘知識點:
1、GC 根
1.棧中引用的對象
2.方法區中的靜態成員
3.方法區中常量引用的對象 全局變量
4.本地方法棧中JNI 本地Native方法
2、可到達性分析
1.從任意根對象到某個對象均不可達時,這個對象就能夠被回收。 平常開發中,常常碰到某個大對象,也就是臨時使用下,而後拋棄。這個時候能夠有個好習慣,就是用完後賦值 null。可能不會當即被gc掉,可是有助於計算。
2. 當一個對象不在引用鏈上,這個時候可能想象成一張圖,對於孤島中的對象,就能夠gc掉。
3、實際中 JVM的gc算法
1. 分代收集算法, 區分出 新生代GC 和 老年代GC
2. 新生代 適合複製算法,這個區對象生產太頻繁,相應的GC也頻繁,使用這種空間換時間的收集算法比較合算。
3. 老年代 適合標記清理或標記整理,這個區的對象成活率高,GC不須要很頻繁。
4、可觸及性
可觸及的
可復活的
不可觸及的
本文由zshipu.com學習筆記或整理或轉載,若有侵權請聯繫,必改之。