2

基本上,我的问题是如果我尝试保留超过 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 上运行。

4

1 回答 1

2

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

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

java -client -Xmx1024M

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

于 2012-06-16T11:39:17.063 回答