Java 内存调优是一个系统性工作,通常围绕 JVM 内存结构、垃圾回收(GC)、应用代码、监控与分析工具 来进行。下面从「思路 → 关键参数 → 工具 → 实战步骤」给你一个清晰、可落地的指南。
Java 8 及以后(常见生产环境):
堆(Heap)
├─ 新生代(Young)
│ ├─ Eden
│ └─ Survivor(S0 / S1)
└─ 老年代(Old)
非堆
├─ 元空间(Metaspace,Java 8+)
├─ 直接内存(Direct Memory)
└─ 线程栈(Stack)
| 问题 | 可能原因 | 调优方向 |
|---|---|---|
| 频繁 Full GC | 老年代太小 / 内存泄漏 | 增大堆、分析对象 |
| OOM: Java heap | 堆太小 / 大对象 | 增大 -Xmx |
| OOM: Metaspace | 类加载过多 | 增大 -XX:MaxMetaspaceSize |
| GC 停顿长 | 老年代大 / GC 算法不合适 | 换 G1 / ZGC |
| CPU 高 + GC 多 | 对象创建过快 | 优化代码 |
-Xms2g # 初始堆
-Xmx2g # 最大堆(建议 = 初始,避免动态调整)
-Xmn512m # 新生代大小
-XX:SurvivorRatio=8 # Eden : S0 : S1
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m
# JDK 8
-XX:+UseParallelGC
-XX:+UseConcMarkSweepGC
# JDK 11+ 推荐
-XX:+UseG1GC
# 超低延迟
-XX:+UseZGC
-Xlog:gc*:file=gc.log:time,level,tags
工具:
jstat -gcutil pid 1000jmap -heap pidtop / htop重点看:
jmap -dump:live,format=b,file=heap.hprof pid
用工具分析:
找:
原则:
示例:
-Xms4g -Xmx4g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
常见问题:
优化手段:
-XX:+UseContainerSupport
-XX:MaxRAMPercentage=75
Java 内存调优 = 监控 → 分析 → 参数调整 → 代码优化 → 验证
如果你愿意,可以告诉我:
我可以直接帮你给一套针对性调优方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。