Java 内存管理调优是一个系统工程,核心目标通常是:减少 Full GC 频率与停顿时间、降低 OOM 风险、提升吞吐量。下面从思路 → 工具 → 参数 → 常见问题 → 实战建议五个层面系统说明。
JVM 内存主要分为:
Heap(堆)
├── Young Gen
│ ├── Eden
│ ├── S0
│ └── S1
└── Old Gen
Non-Heap
├── Metaspace
├── Code Cache
└── Direct Memory
调优本质:
jps
jstat -gc pid 1000
jmap -heap pid
jmap -histo pid | head
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:gc.log
-Xms4g
-Xmx4g
✅ 建议
-XX:NewRatio=2 # Old : Young = 2:1
-XX:SurvivorRatio=8 # Eden : S0 : S1 = 8:1:1
经验值:
# 吞吐量优先
-XX:+UseParallelGC
# 响应时间优先
-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
-XX:+UseZGC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=4m
可能原因
解决
# 增大堆
-Xmx8g
# 分析大对象
jmap -histo pid
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
✅ 常见原因:
-XX:MaxDirectMemorySize=1g
✅ 常见于:
现象
原因
✅ 解决:
List<byte[]> 这种结构static Map<?,?> cache = new HashMap<>(); // 永不被清
new Thread(() -> {}).start(); // 线程未复用
-Xms8g
-Xmx8g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
-Xlog:gc*:file=gc.log:time,uptime,level,tags
Java 内存调优 = 搞清楚“谁在吃内存” + 少让对象进老年代 + 选对 GC + 开日志。
如果你愿意,我可以帮你:
直接把你的 JVM 版本 + 应用类型 + 内存大小 发我即可。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。