垃圾回收總結(jié)

hotspot垃圾回收器概覽

image.png

知識點

  • 只要涉及到對象地址移動的就必須STW,所以young gc一定SWT

垃圾回收算法

  • 標記-清除: 內(nèi)存碎片化
  • 標記-整理: 需要移動對象
  • 復(fù)制算法: 適合對象存活率不高的場景
  • 分代收集

新生代回收器,簡單, 高效(單CPU)

  • serial:單線程的收集器
    image.png
  • parNew: 其實就是Serial收集器的多線程版本


    image.png
  • Parallel Scavenge:比parNew多的功能是支持可控制的吞吐量(Throughput)

老年代回收器

Serial Old:單線程和“標記-整理”算法
Parallel Old:多線程和“標記-整理”算法

CMS

標記—清除算法

  • 初始標記(CMS initial mark):僅僅只是標記一下GC Roots能直接關(guān)聯(lián)到的對象,速度很快
  • 并發(fā)標記(CMS concurrent mark)
  • 重新標記(CMS remark)
  • 并發(fā)清除(CMS concurrent sweep)

1.標記需要SWT
2.用時最長的并發(fā)標記和并發(fā)清除可以與用戶線程同時進行
3.內(nèi)存碎片導(dǎo)致無法分配大對象時會整理內(nèi)存,STW時長會變成

G1

根據(jù)允許的收集時間,優(yōu)先回收價值最大的Region(這也就是Garbage-First名稱的來由)


image.png

1.并行與并發(fā):G1能充分利用多CPU、多核環(huán)境下的硬件優(yōu)勢,使用多個CPU(CPU或者CPU核心)來縮短Stop-The-World停頓的時間,部分其他收集器原本需要停頓Java線程執(zhí)行的GC動作,G1收集器仍然可以通過并發(fā)的方式讓Java程序繼續(xù)執(zhí)行。

2.分代收集:與其他收集器一樣,分代概念在G1中依然得以保留。雖然G1可以不需要其他收集器配合就能獨立管理整個GC堆,但它能夠采用不同的方式去處理新創(chuàng)建的對象和已經(jīng)存活了一段時間、熬過多次GC的舊對象以獲取更好的收集效果。

3.空間整合:與CMS的“標記—清理”算法不同,G1從整體來看是基于“標記—整理”算法實現(xiàn)的收集器,從局部(兩個Region之間)上來看是基于“復(fù)制”算法實現(xiàn)的,但無論如何,這兩種算法都意味著G1運作期間不會產(chǎn)生內(nèi)存空間碎片,收集后能提供規(guī)整的可用內(nèi)存。這種特性有利于程序長時間運行,分配大對象時不會因為無法找到連續(xù)內(nèi)存空間而提前觸發(fā)下一次GC。

4.可預(yù)測的停頓:這是G1相對于CMS的另一大優(yōu)勢,降低停頓時間是G1和CMS共同的關(guān)注點,但G1除了追求低停頓外,還能建立可預(yù)測的停頓時間模型,能讓使用者明確指定在一個長度為M毫秒的時間片段內(nèi),消耗在垃圾收集上的時間不得超過N毫秒,這幾乎已經(jīng)是實時Java(RTSJ)的垃圾收集器的特征了。

G1官方文檔:https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html

最后編輯于
?著作權(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ù)。

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