Eclipse 啟動慢、OOM 崩潰、參數不生效?根因多在對 JVM 記憶體模型與 eclipse.ini 寫法的誤解。本文從原理到實戰徹底釐清。
| 區域 | 用途 | 參數 | 預設值 |
|---|---|---|---|
| Heap (堆) | 所有 Java 物件實例、陣列 | -Xms (初始)、-Xmx (最大) | 物理記憶體 1/64、1/4 |
| Non-Heap (非堆) | 類元資料、常數池、JIT 編譯碼、執行緒堆疊 | -XX:PermSize (初始)、-XX:MaxPermSize (最大) | 物理記憶體 1/64、1/4 |
JDK 8+ 移除 PermGen,改用 Metaspace (Native Memory),參數變為 -XX:MetaspaceSize、-XX:MaxMetaspaceSize。本文以 JDK 7 為主說明,JDK 8+ 同理類推。
-vmargs:標記後續為 JVM 參數 (Eclipse 特有)-Xms128M:啟動時分配 128MB 堆-Xmx512M:堆上限 512MB-XX:PermSize=64M:永久代初始 64MB-XX:MaxPermSize=128M:永久代上限 128MB-Xms > -Xmx 或 PermSize > MaxPermSize-Xmx + MaxPermSize + 其他 Native 記憶體 不得超過每行一個參數,參數與值換行,值含空格用雙引號
# 錯誤寫法
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
# 正確寫法
-vmargs
-Xms128M
-Xmx512M
-XX:PermSize=64M
-XX:MaxPermSize=128M
驗證方式:Help → About Eclipse SDK → Configuration Details 搜尋 vmargs 確認生效。
| 機器記憶體 | -Xms | -Xmx | -XX:PermSize/MaxPermSize | 備註 |
|---|---|---|---|---|
| 4GB (32位 JDK) | 256M | 768M | 128M/256M | 接近 32 位極限 |
| 8GB+ (64位 JDK) | 512M | 1536M | 256M/512M | 或改用 Metaspace |
| 16GB+ (大型專案) | 1G | 3G | 512M/1G | 避免頻繁 GC |