在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
注意事項: