我得到這個錯誤:Java的堆空間了海量的免費堆空間
Exception in thread "543" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2894)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:117)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:407)
at java.lang.StringBuffer.append(StringBuffer.java:241)
在應用程序中開始使用此命令:
java -Xms1024M -Xmx3072M -jar MyJar.jar >> /var/log/MyLog.log 2>&1 &
雖然OS報道4GB的27%正在使用RAM。
按我的計算,應該有近2GB的免費堆空間。難道由於某種原因,JVM不會從初始堆增加堆大小?
有什麼可以導致這個錯誤與堆空間實際上可用?
請注意,這全部在1.6JVM上。具體來說:java-1.6.0 -openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64
編輯:正在建立的字符串不能是2GB長。它由固定長度的物體組成,不能超過幾百個字符。
我肯定會改變我的設計。 –
你是如何獲得27%的數字的?另外,是否有解釋爲什麼操作系統的數字(27%)和你的數字(〜2GB)相差兩倍? – NPE
激活'verbose GC'並顯示結果...此外,您使用該StringBuffer構建了什麼? – home