三、垃圾回收基礎(chǔ)

一、目標(biāo)

回收哪些對象、何時回收對象、如何回收對象

二、回收算法

1.引用計數(shù)法:判斷對象引用,會出現(xiàn)死循環(huán)問題

2.標(biāo)記-清除法:分為兩階段,第一階段標(biāo)記,第二階段清除。從根節(jié)點開始進行可達性分析,對可達對象進行標(biāo)記,第二階段將不可達對象進行清除,會導(dǎo)致內(nèi)存碎片,空間上的不連續(xù),從而影響內(nèi)存使用效率,一般針對老年代


標(biāo)記-清除算法

3.復(fù)制算法

將內(nèi)存分為相同的兩份A和B,回收時將A工作內(nèi)存中的存活對象復(fù)制到另一內(nèi)存B,同時清空A,將B設(shè)置為當(dāng)前工作內(nèi)存。缺點是:浪費內(nèi)存,當(dāng)內(nèi)存中對象存活率高的情況會變得耗時,在新生代的幸存區(qū)采用此方法進行垃圾回收

復(fù)制算法

4.標(biāo)記-壓縮算法

同標(biāo)記-清理的前過程類似,只是第二階段不會直接清除,而是將存活對象進行端移動,然后將端外的空間進行清理,從而達到內(nèi)存空間地址上的連續(xù),不會產(chǎn)生內(nèi)存碎片,針對老年代等存活周期較長的對象的回收


標(biāo)記-壓縮算法

5.分代收集策略

針對不同的階段設(shè)置不同的回收策略,其中分為年輕代、年老代、持久代,持久代一般是類信息,回收效果不明顯,所以新生代和老年代是回收的重點對象。

年輕代:大部分是新對象,對象存活率低,采用效率較高的復(fù)制算法,進行MinorGC

年老代:經(jīng)過多次gc后,對象存活時間長,存活率高,采用標(biāo)記-壓縮清除,進行Major-GC

當(dāng)堆空間:年輕代和年老代內(nèi)存都滿了后會進行FullGC

持久代:類元信息,回收效果不明顯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虛擬機(JVM)垃圾回收器提供...
    簡欲明心閱讀 90,374評論 17 311
  • jvm原理 Java虛擬機是整個java平臺的基石,是java技術(shù)實現(xiàn)硬件無關(guān)和操作系統(tǒng)無關(guān)的關(guān)鍵環(huán)節(jié),是java...
    AI喬治閱讀 17,570評論 21 486
  • 本文由作者自行翻譯,未經(jīng)作者授權(quán),不得隨意轉(zhuǎn)發(fā)。后續(xù)作者會陸續(xù)發(fā)布一系列關(guān)于JVM內(nèi)存管理的文章,敬請期待。 1、...
    猿學(xué)堂閱讀 1,458評論 0 50
  • JVM架構(gòu) 當(dāng)一個程序啟動之前,它的class會被類裝載器裝入方法區(qū)(Permanent區(qū)),執(zhí)行引擎讀取方法區(qū)的...
    cocohaifang閱讀 1,845評論 0 7
  • 一. 垃圾回收的意義 在C++中,對象所占的內(nèi)存在程序結(jié)束運行之前一直被占用,在明確釋放之前不能分配給其它對...
    Stan_Z閱讀 2,055評論 0 25

友情鏈接更多精彩內(nèi)容