Debian Java虛擬機設置技巧
在Debian系統中,JVM參數配置需根據應用場景選擇合適方式,確保參數生效范圍與需求匹配:
/etc/environment
文件,添加JAVA_OPTS
變量(以設置最大堆內存為例):JAVA_OPTS="-Xmx4g"
,保存后運行source /etc/environment
使配置生效。驗證時運行java -version
,后續啟動的Java應用會自動加載該參數。/etc/init.d/myapp
或/usr/local/bin/start.sh
),在啟動命令前添加JAVA_OPTS
:java $JAVA_OPTS -jar /path/to/myapp.jar
,保存后重啟應用(sudo service myapp restart
或./start.sh
)。/etc/systemd/system/myapp.service
),在[Service]
部分添加Environment
行:[Unit]
Description=My Java Application
[Service]
ExecStart=/usr/bin/java $JAVA_OPTS -jar /path/to/myapp.jar
Environment="JAVA_OPTS=-Xmx4g -Xms2g -XX:+UseG1GC"
[Install]
WantedBy=multi-user.target
保存后運行sudo systemctl daemon-reload
重新加載配置,再通過sudo systemctl restart myapp
重啟服務,并用sudo systemctl enable myapp
設置開機自啟。-Xms4g -Xmx4g
),避免運行時堆內存動態擴容/縮容帶來的性能開銷(頻繁擴容會導致GC頻繁觸發,縮容則浪費內存)。-XX:+UseG1GC
)是JDK 9+的默認回收器,適用于大堆內存(如超過4GB),平衡吞吐量與延遲;ZGC(-XX:+UseZGC
)適用于對響應時間要求極高的應用(如金融交易),最大GC暫停時間可控制在10ms以內;Parallel GC(-XX:+UseParallelGC
)適用于批處理任務,追求高吞吐量。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/gc.log
);設置新生代與老年代比例(-XX:NewRatio
,默認2,新生代占1/3,可根據應用對象生命周期調整,如對象生命周期短則增大新生代比例);設置新生代中Eden區與Survivor區比例(-XX:SurvivorRatio
,默認8,Eden占80%,可根據對象晉升率調整)。-XX:MetaspaceSize
(初始元空間大小,如128m)和-XX:MaxMetaspaceSize
(最大元空間大小,如256m)代替舊版的-XX:PermSize
和-XX:MaxPermSize
(JDK 8+已移除永久代);線程棧大小使用-Xss
設置(如-Xss128k
,默認1MB,可根據應用線程數量調整,減少內存占用)。sudo fallocate -l 1G /swapfile
;設置文件權限:sudo chmod 600 /swapfile
;格式化為交換空間:sudo mkswap /swapfile
;啟用交換文件:sudo swapon /swapfile
;永久生效:在/etc/fstab
文件中添加/swapfile none swap sw 0 0
??赏ㄟ^sudo swapon --show
驗證是否啟用。WeakHashMap
代替HashMap
(WeakHashMap
的鍵是弱引用,不會阻止GC回收),確保資源(如文件流、數據庫連接)在使用后正確關閉(使用try-with-resources
語句)。HashMap
替代ArrayList
進行快速查找,用StringBuilder
替代字符串拼接(避免循環中使用+
操作符,減少內存開銷)。