標(biāo)記就是把需要回收的對象標(biāo)志出來屉栓;
標(biāo)記-清除是最基礎(chǔ)的回收算法舷蒲。它有兩個(gè)問題。首先是效率問題友多,標(biāo)記和清除這兩個(gè)過程牲平,都需要全部掃描一遍;另一個(gè)問題就是空間問題域滥,標(biāo)志清除之后會產(chǎn)生大量不連續(xù)的內(nèi)存碎片纵柿,當(dāng)碎片太多的時(shí)候蜈抓,就無法周到足夠的連續(xù)的內(nèi)存,不得不提前觸發(fā)另一次的垃圾收集動(dòng)作藐窄。
另一種回收算法是標(biāo)記-整理算法资昧。標(biāo)記的步驟和標(biāo)記-清除算法一樣酬土,但是后續(xù)步驟不是直接對對象進(jìn)行刪除荆忍,而是讓存活的對象都向一端移動(dòng),然后之際清理掉端邊界以外的內(nèi)存撤缴。
分代收集算法刹枉。這種算法是根據(jù)對象存活周期的不同將內(nèi)存分成好幾塊。一般就是把Java 堆分成新生代(Young Generation)和老年代(Old Generation)屈呕。然后根據(jù)各個(gè)年代采用最適當(dāng)?shù)氖占惴ㄎ⒈ΑT谛律捎昧祟愃朴趶?fù)制算法。而老年代因?yàn)閷ο蟠婊盥矢呋⒄#瑳]有額外空間對它擔(dān)保蟋软,所以必須采用“標(biāo)記-清理”或者“標(biāo)記-整理”算法來進(jìn)行回收。
原文??:https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html#t3