错误:卡片标记阵列空间不足

时间:2012-06-16 10:58:57

标签: java memory

基本上,我的问题是如果我尝试保留超过512M的堆空间,我的Java会抛出错误,即使我的2GB RAM虚拟服务器上有大约1,7GB的RAM空闲。

我会用bash来解释它。我想为我的Minecraft服务器预留大约1024M的RAM,大约在3或4天前工作,但是在我们的主机服务器出现问题后它停止工作。我仍然与主持人保持联系,但他们现在需要时间回答。

我在这个例子中使用了java -version:

root@v0057:~# java -Xmx1024M -version
Error occurred during initialization of VM
Could not reserve enough space for the card marking array

但是,当我这样做时,它可以工作:

root@v0057:~# java -Xmx512M -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

在没有-Xmx的情况下启动它也是一样。

我已经尝试重新安装虚拟服务器和java,将我的Java从6升级到7并在仅运行系统进程的情况下启动java进程。我现在很感激任何帮助。

服务器正在Debian Squeeze上运行。

1 个答案:

答案 0 :(得分:2)

Well -Xmx设置最大堆大小。你需要记住,除了堆之外,还有PermGen(以及许多其他东西)。您还需要记住java进程本身将使用一些RAM。即使你有~1.7GB的空闲而且你将-Xmx设置为“仅”1GB并不意味着你实际上将拥有那么多的RAM,因为所有上述内容也会消耗一些(并且有JVM / OS特定的东西,比如操作系统是否需要连续的内存块来分配对象,当没有-Xms存在时,JVM是否在-Dmx的右边开始使用-Dm,尽管在Debian上所有这些都不应该是一个问题。)

您可以尝试在客户端模式下运行java(有趣的是,现代个人计算机足以让java默认运行为服务器):

java -client -Xmx1024M

或者您可以尝试降低-XX:MaxPermSize属性。