1. 技术点
1.1 eden区过大或者过小的影响
eden区变小, 新new出来的对象都在eden区,会导致频繁的young GC
eden区变大,会导致young GC的时间变长,扫描时间变长了, young GC全程是stw的,所有的请求都是暂停的
1.2 survivor大小的影响
survivor太小会导致一些对象轻易晋升到老年代
survivor过大,因为有一半不怎么使用,会浪费内存
2. 调优案例
3. jvm参数
3.1. GC日志常用 JVM 参数:
// 打印GC的详细信息
-XX:+PrintGCDetails
// 打印GC的时间戳
-XX:+PrintGCDateStamps
// 在GC前后打印堆信息
-XX:+PrintHeapAtGC
// 打印Survivor区中各个年龄段的对象的分布信息
-XX:+PrintTenuringDistribution
// JVM启动时输出所有参数值,方便查看参数是否被覆盖
-XX:+PrintFlagsFinal
// 打印GC时应用程序的停止时间
-XX:+PrintGCApplicationStoppedTime
// 打印在GC期间处理引用对象的时间(仅在PrintGCDetails时启用)
-XX:+PrintReferenceGC