Java垃圾回收學習筆記(三)

大家好,我是咸魚程序員(我想做最咸的那只)

分代垃圾回收算法

在jvm進行gc的時候會發(fā)生stop-the-world? ?而我們進行gc調優(yōu)就是減少stop-the-world的時間

分析過程中會保存一個景象 會生成一個安全點 safepoint:方法調用;循環(huán)跳轉;異常跳轉

安全點數量適中

常見的垃圾收集器

jvm的運行模式?

server? 啟動速度慢? 重量級的虛擬機

client 啟動速度快?


-XX:+UseSerialGc 復制算法 垃圾收集器? 單線程收集器 收集的時候必須要停止所有的工作線程? 默認年輕代的收集器

ParNew收集器 -XX:+UseParNewGc 復制算法 多線程收集 單線程使用最好的是Serial? ParNew最好使用多線程的情況下 使用這個收集器,來收集停止線程,出現(xiàn)了工作線程的收集器? ? 常用與年輕代的收集

只有Serial 和 ParNew可以與CMS配合一起使用

Parallel Scavenge收集器 -XX:+UseParallerGc? 復制算法? 多線程 類似ParNew 比較適合在后臺運算,而不合適更多的交互時間 比起用戶停頓更關注吞吐量? Paraller Scavenge 收集器可以配合Parallel Old的收集器來一起使用? ? Server模式下的默認年輕代垃圾收集器

通常使用Parallel Scavenge 和自動調優(yōu)策略一起使用 -XX:+UseAdaptiveSizePolicy

吞吐量=用戶代碼運行時間/(運行用戶代碼時間+垃圾回收時間)

使用其他的收集器會造成線程卡頓的狀態(tài)



老年代的常見的收集器

Serial old收集器? -XX:UseSerialOldGc? 標記整理算法? 給client模式下的老年代使用

Parallel Old收集器? ?-XX:+UseParallelOldGC 標記整理算法 jdk6以后出現(xiàn)的 吞吐量優(yōu)先

多線程?

CMS 幾乎stop-the-world很短 -XX:+UseConcMarkSweepGC 標記清除算法 對停頓比較敏感 可以使用CMS

1.步驟 初始標記 stop-the-world 會暫停jvm

2.并發(fā)標記 會并發(fā)追索標記 程序不會停頓

3.并發(fā)預清理 查找并發(fā)標記從年輕代晉升到老年代的對象? stop-the-world

4.重新標記 會重新掃描在CMS里面的對象 掃描CMS中的剩余對象

5.并發(fā)清理 清理垃圾對象 程序不會停頓

6.并發(fā)重置,重置 CMS的數據結構

問題:不能壓縮對象

?如果有一個連續(xù)的較大的對象,就只能進行一次GC


G1收集器? 即用于年輕代,右用于老年代? 復制和標記整理算法

-XX:+UseG1GC

特點

并行和并發(fā)

分代收集

空間整合

可預測的停頓

將java代碼劃分為多個Region?

年輕代和老年代不在隔離

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容