Java21参数优化
Eave
2025.11.11
堆内存:初始堆和最大堆设置为相同值,避免运行时动态调整带来的性能波动。
-Xms4g # 堆内存的最小值
-Xmx4g # 堆内存的最大值
元空间:必须设置上限防止泄漏
-XX:MaxMetaspaceSize=256m
# 堆外内存:必须设置上限,特别是使用Netty、gRPC等框架时
-XX:MaxDirectMemorySize=512m
垃圾回收器:ZGC已成为Java 21的默认推荐,追求亚毫秒级暂停
-XX:+UseZGC
# 启用Generational ZGC(Java 21新特性),大幅提升GC效率
-XX:+ZGenerational
# 并行处理引用,提升效率
-XX:+ParallelRefProcEnabled
内存管理优化
-XX:+UseCompressedOops # 压缩对象指针(默认开启,显式声明更安全)
-XX:+UseCompressedClassPointers # 压缩类指针(默认开启)
-XX:+AlwaysPreTouch # 启动时分配所有内存,避免运行时缺页中断
异常诊断:发生OOM时自动生成堆转储
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/app/logs/heap-dump.hprof
现代GC日志记录(JVM Unified Logging Framework)
-Xlog:gc*,gc+heap=debug,gc+ergo=debug:file=/app/logs/gc-%t.log:time,level,tags:filecount=5,filesize=100M
-Xlog:async # 异步日志记录,减少对应用性能的影响
JVM运行时优化
-XX:-OmitStackTraceInFastThrow # 保留频繁异常的堆栈信息
-XX:+PerfDisableSharedMem # 禁用perf数据共享内存,避免tmp目录问题
-XX:+UseContainerSupport # 启用容器支持,让JVM感知容器限制(关键!)
-XX:ActiveProcessorCount=2 # 明确指定CPU核心数,与容器分配一致
使用命令 jcmd pid VM.native_memory summary 来查看 JVM 内部详细的内存分布,精准定位是堆、线程、类(元空间)还是堆外内存(Internal)占用了过多空间。
# jstat -gc pid:查看堆和元空间的内存使用详情和 GC 情况。
-XX:NativeMemoryTracking=summary