G1 不再专门为年轻代和老年代分区。用的是region.
Screen Shot 2022-03-21 at 6.44.44 PM.png
标记流程可以分为
初始标记-》并发标记->最终标记-》筛选回收
-
初始标记:
标记gc roots能够关联的对象,需要暂停用户线程,但是时间会控制在200ms以内这样 -
并发标记:
从GC roots开始进行可达性分析,找出存活的对象,可以和用户线程并发执行 -
最终标记:
用户线程并发执行导致变动的数据,需要暂停用户线程. -
筛选回收:
对region的回收成本和价值进行排序,根据用户希望的GC pause time指定制定回收计划.
Screen Shot 2022-03-21 at 6.50.30 PM.png
ZGC:
jdk11引入zgc收集器,不论是物理还是逻辑,都不存在新老年代的概念了,会分为一个个page,gc时对其进行压缩,因此没有碎片的问题。
吹一波:
停顿时间短: 10ms以内
TB级别内存
Screen Shot 2022-03-21 at 6.52.39 PM.png
用到了读屏障和颜色指针.
在ZGC中,会对加载的引用进行测试,看是否设置了某些位.
ZGC的标记使用的是染色指针技术.
与标记对象的传统算法相比,ZGC在指针上做标记,在访问指针时加入LoadBarrier(读屏障),比如当对象正被GC移动,指针上的颜色就会不对.
读屏障就会先把指针更新为有效地址再返回,也就是,永远只有单个对象读取时有概率被减速,而不存在为了保持应用与GC一致而粗暴整体的StopTheWorld













网友评论