Ubuntu 14 JVM - 無法為卡片標記陣列保留足夠的空間

Ubuntu 14 JVM - 無法為卡片標記陣列保留足夠的空間

升級到 Ubuntu 14 後,我遇到了所有 JVM 崩潰的問題。

我重新安裝Java(oracle和openjdk版本)。我花了一些時間調整 JVM 堆參數,現在終於可以執行 Java 應用程式了。

現在的問題是,每次啟動 SQLDeveloper 時,我的 Eclipse JVM 都會提示:「無法為卡片標記陣列保留足夠的空間」。

如果我理解正確的話,這與 JVM 記憶體區塊分配有關。

我必須遵守什麼規則才能防止這種情況發生嗎?

機器資訊:

Ubuntu 14.04 LTS; 64 位元; CPU 英特爾酷睿2雙核心; 8GB記憶體

Eclipse:java-7-oracle; -d64; -XX:MaxPermSize=256M; -Xms512m -Xmx512m;

Eclipse 運行/調試:java-6-openjdk-amd64; -Xms1024m; -Xmx1024公尺; -XX:+使用串行GC;

SQLDeveloper:java-7-oracle; -XX:MaxPermSize=256M;

答案1

JVM 正在嘗試分配連續的記憶體區塊。由於我係統上有足夠的內存,所以它肯定是碎片化的。

為了解決這個問題,我將初始堆大小設定得非常低(預設 128 不起作用),並允許 JVM 處理它。

我將 JVM 執行參數更改為:

java-6-openjdk-amd64; -Xms1024m; -Xmx1024m; 

到:

java-6-openjdk-amd64; -Xms64m; -Xmx1024m; 

更新:

我還將 overcommit_ratio 從 100(預設)降低到 50。

$ cat /proc/sys/vm/overcommit_ratio

我知道建議將其保留為 100,但由於我已經進行了更改,因此當我並行運行 Chromium/Eclipse/SQLDeveloper 時,我不會收到 jvm 錯誤。

相關內容