Java 25性能调优
Eave
2026.08.28
堆内存:初始堆和最大堆设置为相同值,避免运行时动态调整带来的性能波动
-Xms4g # 堆内存的最小值
-Xmx4g # 堆内存的最大值
# ZGC的分代是自动管理的,所以ZGC下直接删除所有新生代相关参数
# -Xmn256m # 直接设置新生代大小为 256MB。
# -XX:NewRatio=4 # 设置老年代与新生代的比例为 4:1。对于 4G 的堆,新生代约为 800MB。
# -XX:SurvivorRatio=3 # 年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:+UseAdaptiveSizePolicy # 启用自适应大小调整(Java 25默认开启,显式声明更安全)
元空间:必须设置上限防止泄漏,Java 25新增压缩优化
-XX:MaxMetaspaceSize=256m # 元空间最大值
-XX:MetaspaceSize=128m # 初始元空间大小(Java 25建议设置,减少扩容开销)
-XX:+CompactMetaspace # 启用元空间压缩,减少内存碎片(Java 25新增)
-XX:CompressedClassSpaceSize=64m # 压缩类空间大小(Java 25默认优化)
堆外内存:必须设置上限,特别是使用Netty、gRPC等框架时
-XX:MaxDirectMemorySize=512m # 直接内存上限
-XX:ReservedCodeCacheSize=256m # JIT编译代码缓存(Java 25建议适当增大)
-XX:+UseExternalMemoryPool # 启用外部内存池化管理(Java 25新增)
垃圾回收器:Java 25中分代ZGC已成为生产级推荐
-XX:+UseZGC # 启用ZGC
-XX:+ZGenerational # 启用Generational ZGC(Java 21+特性,Java 25已成熟稳定)
-XX:ConcGCThreads=4 # 并发GC线程数(根据CPU核心数调整)
-XX:ZCollectionInterval=5 # ZGC集合间隔(秒),平衡延迟与吞吐
并行处理优化:提升效率(Java 25新增并行类加载/卸载)
-XX:+ParallelRefProcEnabled # 并行处理引用
-XX:+ParallelClassLoading # 并行类加载(Java 25新增)
-XX:+ParallelUnloading # 并行类卸载(Java 25新增)
内存管理优化
-XX:+UseCompressedOops # 压缩对象指针(默认开启,显式声明更安全)
-XX:+UseCompressedClassPointers # 压缩类指针(默认开启)
-XX:+AlwaysPreTouch # 启动时分配所有内存,避免运行时缺页中断
-XX:+UseLargePages # 使用大页内存(需操作系统支持,Java 25支持更灵活配置)
-XX:+UseBiasLocking # 偏向锁优化(Java 25重新启用)
NMT:使用命令jcmd <pid> VM.native_memory summary来查看JVM内部详细的内存分布,精准定位是堆、线程、类(元空间)还是堆外内存(Internal)占用了过多空间
-XX:NativeMemoryTracking=summary # 内存追踪摘要模式,使用jstat -gc 查看堆和元空间的内存使用详情和 GC 情况
# -XX:NativeMemoryTracking=detail # 详细模式(性能影响较大,仅诊断时使用)
异常诊断:发生OOM时自动生成堆转储,Java 25支持压缩
-XX:+HeapDumpOnOutOfMemoryError # OOM时生成堆转储
-XX:HeapDumpPath=./heap/heap-dump-%t.hprof # 堆转储路径(含时间戳)
-XX:+ExitOnOutOfMemoryError # OOM时自动退出(Java 25建议配合容器使用)
-XX:HeapDumpCompression=zstd # 堆转储压缩(Java 25新增,节省磁盘空间)
-XX:ErrorFile=/var/log/{{appname}}/oom.log
GC日志:异步日志记录,减少对应用性能的影响
-Xlog:gc*,gc+heap=debug,gc+ergo=debug:file=/var/log/{{appname}}/gc-%t.log:time,level,tags:filecount=5,filesize=100M
-Xlog:async # 异步日志记录,减少对应用性能的影响
-Xlog:async-buffer-size=2M # 异步日志缓冲区大小(Java 25新增)
-Xlog:gc+stats=info # GC统计信息结构化输出(Java 25新增)
JVM运行时优化:Java 25增强容器感知
-XX:-OmitStackTraceInFastThrow # 保留频繁异常的堆栈信息
-XX:+PerfDisableSharedMem # 禁用perf数据共享内存,避免tmp目录问题
-XX:+UseContainerSupport # 启用容器支持,让JVM感知容器限制(关键!)
-XX:ActiveProcessorCount=4 # 明确指定CPU核心数,与容器分配一致
-XX:+UseContainerCPUSet # 使用容器CPU集合(Java 25新增,提升CPU分配准确性)
-XX:+TieredCompilation # 分层编译(默认开启)
-XX:+UseAOT # 启用AOT编译(Java 25稳定特性)
线程:设置线程栈大小,防线程爆炸,默认1M,线程多时浪费严重
-XX:ThreadStackSize=512k