GC调优过程:
1、列出性能目标
2、运行测试代码
3、测量结果
4、将结果与性能目标相对比
5、如果没达到性能目标,则重新修改执行测试。
性能目标分类:
Latency、Throughput、Capacity(基础设施成本限制:例如设备资源都是有限的,不可能任意添加)
【JVM】吞吐量与延迟关系:堆内存增大,gc一次能处理的垃圾对象增大,吞吐量增大,但gc一次的时间会延长,导致后面排队的线程等待时间延长。内存堆减小,gc一次时间缩短,排队等待的线程等待时间缩短,延迟减小,吞吐量减小。
GC性能调优目标限制:确保GC暂停持续时间不超过期望阈值、确保应用程序挂起时间不超过期望阈值、在满足延迟和吞吐量在合理范围内的情况下减少基础设施的开销。
性能调优对比:
-Xmx120M -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
开始:2020-12-15T17:23:29.706-0800: 0.213: [GC (Allocation Failure) 2020-12-15T17:23:29.706-0800: 0.213: [ParNew: 32661K->4096K(36864K), 0.0090053 secs] 32661K->26499K(118784K), 0.0090600 secs] [Times: user=0.04 sys=0.01, real=0.01 secs]
结束:2020-12-15T17:33:28.123-0800: 598.627: [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
参考《Plumbr Handbook Java 》