在Linux中配置Java內存主要通過設置JVM參數實現,以下是關鍵配置方式及參數說明:
堆內存(Heap)
-Xms
:設置初始堆大?。ㄈ?-Xms512m
,默認為物理內存的1/64)。-Xmx
:設置最大堆大?。ㄈ?-Xmx4g
,建議與 -Xms
保持一致以避免動態擴容開銷)。-Xmn
:設置新生代大?。ㄈ?-Xmn1g
,可替代 -XX:NewSize
和 -XX:MaxNewSize
)。元空間(Metaspace,JDK 8+)
-XX:MetaspaceSize
:初始元空間大?。ㄈ?-XX:MetaspaceSize=256m
)。-XX:MaxMetaspaceSize
:最大元空間大?。ㄈ?-XX:MaxMetaspaceSize=512m
,避免內存泄漏)。其他內存區域
-XX:MaxDirectMemorySize
:限制堆外內存(如NIO使用的直接內存,默認與 -Xmx
一致)。命令行參數
直接在啟動Java應用時添加參數,例如:
java -Xms2g -Xmx4g -XX:MetaspaceSize=256m -jar app.jar
啟動腳本(如Shell腳本)
在腳本中通過 JAVA_OPTS
環境變量設置,例如:
export JAVA_OPTS="-Xms1g -Xmx2g -XX:+UseG1GC"
java $JAVA_OPTS -jar app.jar
服務管理文件(如systemd)
編輯服務文件(如 /etc/systemd/system/app.service
),在 ExecStart
中添加參數:
[Service]
ExecStart=/usr/bin/java -Xms512m -Xmx1g -jar /path/to/app.jar
之后執行 systemctl daemon-reload
生效。
-Xms
+-Xmx
)建議不超過物理內存的70%,預留空間給系統和其他進程。-XX:+UseG1GC
),可設置 -XX:MaxGCPauseMillis
控制暫停時間。-XX:+UseConcMarkSweepGC
,JDK 9已標記廢棄)。jstat -gc <pid>
或 VisualVM
工具觀察內存使用情況,調整參數直至GC頻率和耗時合理。參考來源: