【JVM性能调优】- GC调优实操思路

1、GC调优实操思路

前面几点所提及的都是GC调优的一些方法论以及衡量指标,但在真正需要处理GC调优时,上面几点只能给你提供辅导,并不能建立完善的调优思路,因此,接下来再一同论述GC调优的具体实操思想。

GC调优时,一般会根据Java程序所装配的垃圾收集器以及具体的GC日志来作为基础进行操作,但不同的垃圾回收器执行的GC日志都是不同的,因此并没有万能的调优策略可以满足所有的性能指标,GC优化要建立在具体的业务场景及环境中,才能达到事半功倍的效果。不过通常GC调优核心步骤如下:

  • ①明确优化目标
  • ②实施优化操作
  • ③跟踪优化结果

调优前首先需要确定的就是优化目标,到底是需要减少GC停顿,还是增大程序吞吐等,然后再根据目标排除GC日志,分析后根据日志中的分配速率、提升速率、GC频率、GC各阶段停顿时间等指标,实行具体的优化操作。

同时,也不必奢求一次优化到位,GC调优通常是需要多次进行的,一次优化往往无法达到目标预期,需要不断的根据优化后的GC日志再次制定优化策略,从而最终达到优化目标。

但GC调优的根本其实是在调"对象",如果程序本身代码就存在问题,好比代码中存在频繁创建对象的逻辑,就算你调出花来也无济于事,必须还得从根源上解决问题,这种情况下应当采用jmap工具分析堆使用情况,查看对象分布,从而反向定位代码中的问题并加以解决。

2、GC优化总结

凡是涉及性能调优的内容,几乎都必须建立在监控系统之上,不一定要全面,但至少能让调优前有指标数据可参考。对于监控系统中,JVM-GC这块建议统计的信息:

  • ①流量方面:流量峰值、流量均值、用活时间段等。
  • ②对象方面:分配速率、每个请求的分配均值/峰值、提升速率、每次提升总量均值等。
  • ③GC方面:MinorGC、FullGC停顿时长、GC触发间隔、GC回收总量等。
  • ..........

GC调优时的收益排序:改善代码 > 装配合适的GC回收器 > 重新设置内存比例/大小 > 调整JVM参数。

但需重点注意的是:上述的GC调优理论都是基于G1之前的分代垃圾收集器而言的,G1之后的不分代收集器,如:ZGC、ShenandoahGC等压根没必要刻意优化,自身的机制本就足够优异,而且后续的不分代收集器对外暴露的可操作参数也并不多。

相关推荐
阿崽meitoufa6 小时前
JVM虚拟机:运行时数据区域总览
jvm
江君是实在人6 小时前
java jvm 调优
java·开发语言·jvm
阿崽meitoufa7 小时前
JVM虚拟机:垃圾收集算法
java·jvm·算法
程序员敲代码吗8 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
佛祖让我来巡山8 小时前
【面试题】为什么 Java 8 移除了永久代(PermGen)并引入了元空间(Metaspace)?
jvm·元空间·永久代
风送雨10 小时前
FastAPI 学习教程 · 第5部分
jvm·学习·fastapi
程序员敲代码吗10 小时前
如何从Python初学者进阶为专家?
jvm·数据库·python
萧曵 丶12 小时前
JVM 字节码指令浅谈
jvm·类加载
期待のcode12 小时前
浅堆深堆与支配树
java·jvm·算法
不穿格子的程序员12 小时前
JVM篇2:根可达性算法-垃圾回收算法和三色标记算法-CMS和G1
java·jvm·g1·根可达性算法·三色标记算法