-2

抱歉问这个问题,应该多搜索一下。

我使用相当大的数据集和内存密集型算法运行 weka。我需要我无法获得的所有堆空间!

这有效:

java -jar -Xmx2048m weka.jar &

但这并不

java -jar -Xmx4096m weka.jar &

我得到:

Error occurred during initialization of VM Could not reserve enough 
space for object heap Could not create the Java virtual machine.

通过一些快速搜索,我发现这是上限

java -jar -Xmx2594m weka.jar &

我有 4GB 内存,但有 32 位机器。为什么我不能使用 2^32 字节 = 4096MB 的内存?

对于未来,我想知道如果我有正确的硬件和操作系统,我是否可以用数百 GB 的堆空间运行 java?

我安装了 1.6 和 1.7 JVM:

$java -showversion
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1)
OpenJDK Server VM (build 20.0-b12, mixed mode)
4

4 回答 4

2

使用允许您使用更多内存的 64 位版本的 Java。这是 32 位 Java 虚拟机的限制。

于 2012-10-05T09:18:34.480 回答
2

我有 4GB 内存,但有 32 位机器。为什么我不能使用 2^32 字节 = 4096MB 的内存?对于未来,我想知道如果我有正确的硬件和操作系统,我是否可以用数百 GB 的堆空间运行 java?

对于 4 GB,我建议您使用 64 位操作系统和可能的 64 位 JVM,因为堆大小的限制可以小至 1.2 GB(在 Windows XP 上)

如果你想要更大的 JVM,我建议确保你有 64 位操作系统和 JVM,并且你有比 JVM 更大的内存。例如,如果你想要一个 40 GB 的堆,你需要 48 GB 或 64 GB 的内存。

于 2012-10-05T09:22:17.423 回答
2

如果你有 4GB 的 RAM,你怎么能指望你的 JVM 可以使用所有的内存呢?JVM 正在运行的操作系统怎么样,这也需要内存。它的工作方式是,即使您通常可以处理所有 4GB,操作系统也会限制每个进程可用的数量。

于 2012-10-05T09:22:40.827 回答
0

您无法分配 4096m 因为。它试图获得一个 4096m 的块。这在任何给定时间点都是不可能的。因此,您可以使用 3000-4000 之间的一些较小的值。或确保您的 RAM 未被任何进程使用

于 2013-05-15T10:03:29.617 回答