| 收集器 | 啟動參數 | 適用場景 |
| Serial GC | 預設 | 單 CPU、Client 端 |
| Throughput (Parallel) GC | -XX:+UseParallelGC | 多 CPU、批次處理、高吞吐優先 |
| CMS (Concurrent Mark Sweep) | -XX:+UseConcMarkSweepGC | 多 CPU、低停頓需求、Web 應用 |
| Incremental Low Pause | -Xincgc | Young GC 同時增量回收 Old,實驗性 |
主流容器 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),觀察晋升率、停頓分布
記憶體調優無銀彈,唯有「監控 → 分析 → 調整 → 驗證」的持續迴圈,才能找到最適合業務負載的平衡點。
- 上一篇文章: Web Service 不是銀彈:.NET 與 Java 互操作的三大誤區與替代方案
- 下一篇文章: Eclipse JUnit 單元測試快速上手:從建立測試案例到自動化測試套件
Copyright ©
程式碼之家 All Rights Reserved