JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么

这篇博客分析了从JDK 8升级到JDK 11后,使用G1垃圾收集器导致HBase性能下降20%的问题。文章详细探讨了性能下降的原因,包括JDK 11中G1 GC的优化变化,并通过日志分析、JFR检查和火焰图等工具定位到问题可能与PLAB(Parallel Local Allocation Buffer)大小的计算错误有关。最后,作者通过版本验证发现JDK 9的一个补丁导致了性能问题,并提供了相应的解决方案。
摘要由CSDN通过智能技术生成

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么

结论:使用 G1 GC,JDK 11 相对于 JDK 8 来说性能明显下降。

3原因分析

=====

从 JDK 8 到 JDK 11, G1 GC 做了非常多的优化用于提高性能。为什么 JDK 11 对于应用者来说更不友好?简单的总结一下从 JDK 8 到 JDK 11 做得一些比较大的设计变化,如下表所示:

JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么

由于从 JDK 8 到 JDK 11 特性变化太多,对于这样的性能下降问题,为了能快速有效的解决,我们做了如下的尝试。

3.1统一 JDK 8 和 JDK 11 的参数,验证效果

=============================

由于 JDK 11 和 JDK 8 实现变化很多,部分功能完全不同,但是这些变化的功能一般都有参数控制,一种有效的尝试:梳理 JDK 8 和 JDK 11 关于 G1 的参数,将它们设置为相同的值,比如关闭 IHOP 的自适应,关闭线程调整等。这里简单的给出 JDK 8 和 JDK 11 不同参数的比较,如下图所示:

JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么

将两者参数都设置为和 JDK 8 一样的值,重新验证测试,结果不变,JDK 11 性能仍然下降。

3.2GC日志分析,确定JDK 11性能下降点

=======================

对于 JDK 8 和 JDK 11 同时配置日志收集功能,重新测试,获得 GC 日志。通过 GC 日志分析,我们发现差异主要在 G1 young gc 的 object copy 阶段(耗时基本在这),JDK 11 的 Young GC 耗时大概 200ms,JDK 8 的 Young GC 耗时大概 100ms,两者设置的目标停顿时间都是 100ms。

JDK 11 中 GC 日志片段:

JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么

JDK 8中 GC 日志片段:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值