一、目標(biāo)
回收哪些對象、何時回收對象、如何回收對象
二、回收算法
1.引用計數(shù)法:判斷對象引用,會出現(xiàn)死循環(huán)問題
2.標(biāo)記-清除法:分為兩階段,第一階段標(biāo)記,第二階段清除。從根節(jié)點開始進行可達性分析,對可達對象進行標(biāo)記,第二階段將不可達對象進行清除,會導(dǎo)致內(nèi)存碎片,空間上的不連續(xù),從而影響內(nèi)存使用效率,一般針對老年代

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ū)采用此方法進行垃圾回收

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

5.分代收集策略
針對不同的階段設(shè)置不同的回收策略,其中分為年輕代、年老代、持久代,持久代一般是類信息,回收效果不明顯,所以新生代和老年代是回收的重點對象。
年輕代:大部分是新對象,對象存活率低,采用效率較高的復(fù)制算法,進行MinorGC
年老代:經(jīng)過多次gc后,對象存活時間長,存活率高,采用標(biāo)記-壓縮清除,進行Major-GC
當(dāng)堆空間:年輕代和年老代內(nèi)存都滿了后會進行FullGC
持久代:類元信息,回收效果不明顯