在Linux下管理Java内存主要通过JVM参数配置,核心参数及方法如下:
堆内存设置
-Xms:初始堆内存大小(如 -Xms512m,默认为物理内存的1/64)。-Xmx:最大堆内存大小(如 -Xmx2g,默认为物理内存的1/4)。-Xms 和 -Xmx 设为相同值,避免动态调整开销。新生代/老年代设置
-Xmn:新生代内存大小(如 -Xmn1g,通常为堆内存的1/3-1/4)。-XX:NewRatio 调整比例(如 -XX:NewRatio=2 表示新生代:老年代=1:2)。元空间设置(Java 8+)
-XX:MetaspaceSize:初始元空间大小(如 -XX:MetaspaceSize=256m)。-XX:MaxMetaspaceSize:最大元空间大小(如 -XX:MaxMetaspaceSize=512m,默认无限制,可能引发内存泄漏)。线程栈内存设置
-Xss:单个线程栈内存大小(如 -Xss1m,默认约1MB,过小可能导致 StackOverflowError)。垃圾回收器选择
-XX:+UseG1GC:G1回收器(适合大内存、低延迟场景)。-XX:+UseZGC:ZGC回收器(超低停顿,需固定堆内存)。-XX:+UseShenandoahGC:Shenandoah回收器(并发压缩,适合实时系统)。容器化环境配置
-XX:UseContainerSupport(自动读取cgroup内存限制)。-XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0(推荐占容器内存70%)。验证与监控
jstat -gc <pid> 查看GC情况。jmap -heap <pid> 分析堆内存结构。-Xlog:gc* 记录GC详情。示例命令:
# 设置初始堆512MB、最大堆2GB、新生代1GB,使用G1回收器
java -Xms512m -Xmx2g -Xmn1g -XX:+UseG1GC -jar app.jar
# 容器环境下设置堆内存为容器内存的70%
java -XX:UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -jar app.jar
注意事项: