GC收集器搭配圖:
1.serial收集器:單線程收集器术唬,運行時stw,client模式下默認新生代收集器(簡單而高效滚澜,桌面應用場景下粗仓,jvm管理的內存一般不大,stw時間一般可控制在100ms內);
gc算法:新生代使用復制算法设捐,老年代使用標記-整理算法
2.ParNew收集器:Serial的多線程版本借浊。server模式下的首選新生代收集器,因為除了Serial外挡育,只有它能和CMS配合工作;
3.Parallel Scavenge收集器:新生代收集器巴碗,多線程+復制算法,目的是達到一個可控制的吞吐量: ?(運行用戶代碼時間/(運行用戶代碼時間+gc時間));
4.Serial Old收集器:serial收集器的老年代版本即寒,單線程橡淆,標記-整理算法;
5.Parallel Old收集器:Parallel Scavenge收集器的老年代版本,多線程+標記-整理算法母赵。適合注重吞吐量和cpu敏感的場景;
6.CMS收集器:基于標記-清除算法逸爵,目標是獲取最短stw時間
步驟:
初始標記(stw):標記gc root能直接關聯的對象
并發(fā)標記:gc root tracing,可以和用戶線程并發(fā)執(zhí)行
重新標記(stw):修正并發(fā)標記期間凹嘲,標記變動的對象的標記記錄
并發(fā)清除:可以和用戶線程并發(fā)執(zhí)行
優(yōu)點:并發(fā)收集师倔,低停頓
缺點:1.對cpu資源敏感;2.無法處理浮動垃圾周蹭;3.產生內存碎片趋艘;
7.G1收集器:整體基于標記-整理算法,局部基于復制算法
特點:1.并行與并發(fā)凶朗,使用多個cpu來減少stw瓷胧;2.分代收集;3.空間整合棚愤,不會產生內存碎片搓萧;4.stw可預測
g1將java堆劃分為多個大小相等的獨立區(qū)域(Region),跟蹤各個region里面垃圾堆積的價值大小,維護一個優(yōu)先列表(回收所需時間和回收能獲得的空間)宛畦,根據運行的gc時間瘸洛,回收價值最大的region
步驟:類似cms
初始標記
并發(fā)標記
最終標記
篩選回收