垃圾回收算法
- 標記-清除
- 復(fù)制算法
- 標記-整理
現(xiàn)在垃圾收集器均采用分代收集策略,新生代由于98%的對象都是朝生夕死,復(fù)制算法更合適,只復(fù)制還存活的對象,工作量小,所以效率高。顯然復(fù)制算法不適合老年代,因為老年代中的對象大部分是大對象,且長時間存活,復(fù)制算法效率太低。老年代使用標記-清除,標記-整理算法更合適。文章來源:http://www.zghlxwxcb.cn/news/detail-607242.html
垃圾收集器
- serial/serial-old
單線程垃圾收集器,前者使用復(fù)制算法,適用新生代,后者使用標記-整理算法,用于老年代 - Parnew
多線程版本的serial,只是使用了多線程,但不是真正的并發(fā),系統(tǒng)gc時用戶線程還是要暫停(stop-the-world),使用復(fù)制算法,適用于新生代的垃圾回收 - Parallel Scavenge 收集器
復(fù)制算法,多線程,適用于新生代垃圾回收,和Parnew類似,但是不追求gc停頓時間,更關(guān)注吞吐量 - Parallel old
標記-整理算法,多線程、適用于老年代 - CMS
真正的并發(fā)垃圾收集器,標記-清除算法,適用于老年代。
執(zhí)行步驟:
a. 初始標記 標記gc-root
b. 并發(fā)標記 gc-root tracing
c. 重新標記 標記并發(fā)期間增量改動的標記
d. 并發(fā)清除 并發(fā)執(zhí)行內(nèi)存回收
CMS缺點:
a. 標記-清除導(dǎo)致內(nèi)存碎片太多,容易引起full-gc
b. 無法收集浮動垃圾(浮動:并發(fā)清除過程中新產(chǎn)生待標記的對象)
c. 對CPU資源敏感。默認啟動的線程 (CPU+3)/4,在CPU較少時,占用較多資源,影響用戶線程資源文章來源地址http://www.zghlxwxcb.cn/news/detail-607242.html
- G1
a.基于標記-整理算法,不會引起內(nèi)存碎片
b.可以準確的計算停頓時間,保證高吞吐的同時,降低gc停頓時間
G1將內(nèi)存劃分為相同大小的區(qū)域region,優(yōu)先回收垃圾最多的區(qū)域,可以在有限時間內(nèi)獲得最大的垃圾收集效率。為什么gc時可達性分析不需要掃全內(nèi)存區(qū)域,因為G1維護了一個remeberset,用來存儲對象之間的依賴,只需要讀取每個region的remeberset即可。
到了這里,關(guān)于溫故而知新-JVM垃圾收集器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!