
JVM总结-03_GC调优
2026/6/30
GC调优
java -XX:+PrintFlagsFinal -version | findstr “GC”
查看GC相关命令
垃圾收集器调试排错
-
调优领域
-
内存
-
锁竞争
-
cpu占用
-
io
-
-
确定目标
-
若要更快的响应时间:CMS,G1,ZGC
-
若要更大的吞吐量:ParallelGC
-
-
从应用层面
-
数据是否过多(从数据库查询很多数据)
-
数据是否太臃肿,Integer 24byte,int 4byte
-
是否存在内存泄漏
弱引用,软引用,及时释放
缓存数据采用第三方组件如Redis
-
-
预设堆内存
新生代空间设置
-Xmx:
-
值越小,频繁触发新生代
-
值越大,老年代空间被占用,触发full gc
理想大小:
-
新生代能够容纳所有【并发量 * (请求-相应)】的数据
-
幸存者区域能够容纳所有 【当前活跃的对象 + 需要晋升对象】
-
设置合理的晋升阈值,让希望存活的对象尽快晋升【别老待在菜鸟营(幸存者)了,你已经是个java高手了,要学会自己上厕所了】
-XX:MaxTenuringThreshold=threshold
-XX:+PrintTenuringDistribution
老年代空间设置
CMS为例(看看就好)
-
cms的老年代内存越大越好
-
观察老年代FullGC是否频繁,优先调新生代
-
观察FullGC时老年代内存占用,适当调大1/4,1/3
最好的调优就是直接加内存。。。
案例
-
FullGC和MinorGC频繁
- 内存空间紧张,导致新生代老年代都不够塞,加内存
-
请求高峰期发生FullGC,单次暂停时间长
-
在根节点枚举时,新生代对象过多导致响应时间过长,可采用响应时间优先的回收器相关的设置。
-XX:+CMSScavenageBeforeMark,重新标记前先进行一次young gc
-
-
老年代充裕的情况下发生FullGC(jdk1.7)
- 显示调用了gc了吧。。。
常用参数

— END —