首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JVM 記憶體參數完整調優指南:Heap、Stack、GC 策略與主流容器配置實戰

     編輯:Java 相關知識

JVM 記憶體設定直接影響應用穩定度與效能。本文系統整理 Heap 三代結構、核心參數、GC 執行緒機制、四大收集器選型、常見 OOM 原因與解法,並提供 Tomcat、WebLogic、JBoss、Eclipse、WebSphere 主流容器的具體配置範例。

Heap 三代結構

  • Young Generation:新建物件分配區,滿觸發 Minor GC,存活物件晋升 Old
  • Old Generation:長期存活物件,Major GC 回收
  • Permanent Generation (PermGen):類別元資料、常數池,JDK 8 後改為 Metaspace

核心參數

兩條 GC 執行緒

  1. 專責 Young Gen 回收(Minor GC)
  2. Heap 不足時掃描全堆,將存活物件晋升 Old(Major GC)

Old Gen = -Xmx - -Xmn。若 -Xms 過大導致第二條執行緒頻繁運行,效能下降。

頻繁 GC 成因與對策

參數含義建議
-Xms初始 Heap 大小Server 端設定與 -Xmx 相同,避免動態擴縮
-Xmx最大 Heap 大小不超過物理記憶體 70-80%
-XmnYoung Gen 大小約 -Xmx 的 1/3,過大導致 Old 過小
-Xss每執行緒 Stack 大小256k-1M,影響最大執行緒數
-XX:PermSize/MaxPermSizePermGen 大小(JDK<8)載入大量類別/動態代理專案需調大

健康指標:GC 後剩餘 ≥ 50%(Server 端建議 ≥ 65%)

四大 GC 收集器選型

成因對策
程式呼叫 System.gc()移除呼叫或加 -XX:+DisableExplicitGC
中介軟體自行觸發 GC檢查中介軟體參數停用
Heap 過小調大 -Xmx
大量短命物件建立/釋放物件復用、StringBuilder 替代 String、物件池

主流容器 JVM 設定範例

Tomcat (Linux)

# catalina.sh
export JAVA_OPTS="-Xms512m -Xmx1024m -Xmn384m -XX:+UseConcMarkSweepGC"

Tomcat (Windows Service)

# 註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\TomcatService Manager\TomcatX\Parameters\JavaOptions
-Xms300m -Xmx350m -XX:+UseConcMarkSweepGC

WebLogic

# startWebLogic.cmd 或 commEnv.cmd
set JAVA_OPTIONS=-Xms512m -Xmx1024m -Xmn384m

JBoss

# bin/run.conf
JAVA_OPTS="-server -Xms128m -Xmx512m -XX:+UseParallelGC"

Eclipse

eclipse.exe -vmargs -Xms256m -Xmx512m -XX:+UseConcMarkSweepGC

WebSphere

管理主控台 → Application Servers → server1 → Process Definition → Java Virtual Machine → 設定 Initial/Maximum Heap Size

關鍵提醒

  • Heap ≠ 進程記憶體:進程記憶體 = Heap + Metaspace + Thread Stacks + Code Cache + Direct Memory + GC 開銷
  • 增大 Heap 會增加單次 GC 停頓時間,需平衡頻率與延遲
  • 生產環境必須啟用 GC Log:-Xloggc:gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
  • 定期分析 GC Log(GCViewer、GCEasy),觀察晋升率、停頓分布

記憶體調優無銀彈,唯有「監控 → 分析 → 調整 → 驗證」的持續迴圈,才能找到最適合業務負載的平衡點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
收集器啟動參數適用場景
Serial GC預設單 CPU、Client 端
Throughput (Parallel) GC-XX:+UseParallelGC多 CPU、批次處理、高吞吐優先
CMS (Concurrent Mark Sweep)-XX:+UseConcMarkSweepGC多 CPU、低停頓需求、Web 應用
Incremental Low Pause-XincgcYoung GC 同時增量回收 Old,實驗性