我得到这个错误: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