問題
JVM 每次 GC 後調整堆大小(-Xms != -Xmx),是好是壞?
分析
- 動態調整優點:節省物理內存,小應用啟動快,適合內存受限環境。
- 動態調整缺點:
• GC 後擴容/縮容觸發Full GC,停頓時間長。
• 頻繁調整導致性能抖動,吞吐量不穩定。
• 容器化環境(Docker/K8s)易觸發 OOM Kill(內存限制未生效)。
- 固定堆優點(-Xms = -Xmx):
• 避免運行時調整開銷,GC 行為可預測。
• 生產環境推薦,配合 -XX:+AlwaysPreTouch 預先觸發頁面映射。
建議
生產環境建議 -Xms = -Xmx,預留足夠內存;開發/測試/小內存容器可允許動態調整。核心原則:內存充足時優先性能(固定堆),內存緊張時優先空間(動態調整)。