|
常見的垃圾回收算法有: 標(biāo)記-清除算法、復(fù)制算法、標(biāo)記-整理算法、分代收集算法 標(biāo)記-清除算法標(biāo)記—清除算法包括兩個(gè)階段:“標(biāo)記”和“清除”。 標(biāo)記階段:確定所有要回收的對(duì)象,并做標(biāo)記。 清除階段:將標(biāo)記階段確定不可用的對(duì)象清除。 缺點(diǎn): 標(biāo)記和清除的效率都不高。 復(fù)制算法內(nèi)存分成大小相等的兩塊,每次使用其中一塊,當(dāng)垃圾回收的時(shí)候, 把存活的對(duì)象復(fù)制到另一塊上,然后把這塊內(nèi)存整個(gè)清理掉。 缺點(diǎn): 需要浪費(fèi)額外的內(nèi)存作為復(fù)制區(qū)。 標(biāo)記-整理算法標(biāo)記—整理算法不是把存活對(duì)象復(fù)制到另一塊內(nèi)存,而是把存活對(duì)象往內(nèi)存的一端移動(dòng),然后直接回收邊界以外的內(nèi)存。 缺點(diǎn): 算法復(fù)雜度大,執(zhí)行步驟較多 分代收集算法目前大部分 JVM 的垃圾收集器采用的算法。根據(jù)對(duì)象存活的生命周期將內(nèi)存劃分為若干個(gè)不同的區(qū)域。一般情況下將堆區(qū)劃分為新生代( Young Generation 和老年代( Tenured Generation ),永久代( Permanet Generation )。 老年代的特點(diǎn)是每次垃圾收集時(shí)只有少量對(duì)象需要被回收,而新生代的特點(diǎn)是每次垃圾回收時(shí)都有大量的對(duì)象需要被回收,那么就可以根據(jù)不同代的特點(diǎn)采取最適合的收集算法。 Young:存放新創(chuàng)建的對(duì)象,對(duì)象生命周期非常短,幾乎用完可以立即回收,也叫 Eden 區(qū)。 Tenured: young 區(qū)多次回收后存活下來的對(duì)象將被移到 tenured 區(qū),也叫 old 區(qū)。 Perm:永久帶,主要存加載的類信息,生命周期長(zhǎng),幾乎不會(huì)被回收。 缺點(diǎn): 算法復(fù)雜度大,執(zhí)行步驟較多。
|
|
|