昆仑弟子_面霸
08-13·后端开发·10年+
面试吊打面试官
面试官:说一下,G1、ZGC、Shenandoah,这三个GC的特点?我:G1是JDK9默认的,把堆分成Region,做分区收集。ZGC是JDK11出的,目标是亚毫秒级停顿,不管堆多大,STW都控制在10ms以内。Shenandoah是OpenJDK的,思路和ZGC类似,也是低停顿面试官:那你先讲讲G1,它的核心机制是什么?我:G1把堆拆成很多大小相等的Region。它维护一个优先级列表,每次GC优先回收多的Region。使用Remembered Set来记录跨Region的引用,避免全堆扫描面试官:那ZGC呢?它怎么做到亚毫秒停顿?我:ZGC核心是读屏障和着色指针。读屏障在每次加载引用时会做一些额外处理,标记引用关系。着色指针利用指针的高位存储标记信息,这样读屏障不用额外判断,性能开销很低。而且ZGC的大部分工作都是并发的,标记、整理都是并发做的,只有最开始的标记和最后的引用处理需要短暂STW,所以停顿时间和堆大小无关。面试官:Shenandoah和ZGC有什么区别?我:共同点都是Brooks Pointer转发指针,都是并发标记并发整理。区别在于ZGC用着色指针加读屏障,Shenandoah用Brooks Forwarding Pointer加写屏障。ZGC在oracle jdk里,Shenandoah在OpenJDK里面试官:那实际生产中你怎么选?我:如果是交易、支付这种对 P99 延迟要求极高的,或堆在几十G以上的,选ZGC或Shenandoah。如果JDK版本是JDK8只能用G1,JDK11开始能用ZGC,JDK15以后ZGC面试官:那如果我用G1,有什么调优经验分享?我:G1调优主要关注几个参数。-XX:MaxGCPauseMillis设置期望的最大停顿时间,G1会根据这个动态调整Region大小。-XX:G1HeapRegionSize设置Region大小,建议1M到32M之间。还有 -XX:InitiatingHeapOccupancyPercent 控制老年代GC触发阈值等等
发布于 广东
2
6
1
未登录
友善发言
评论
加载中
下载脉脉APP,成就职业梦想
违法不良信息&未成年人有害信息举报电话/客服电话:400 065 0808
违法不良信息&未成年人有害信息举报邮箱/客服邮箱:maimai@taou.com
清朗系列专项行动相关违规信息举报电话:400 065 0808,举报邮箱:maimai@taou.com
个人/企业等被诽谤侮辱、人身权或知识产权等被侵犯、网络谣言的举报地址:maimai.cn/tousu | 涉企虚假不实信息举报投诉专区
京ICP备12005786号-1copyright©maimai.cn