Java堆大小:当设置过大时出现错误

3

我有一个程序需要大量的内存支持。但是,由于某种原因当我尝试将最大堆空间设置为超过1.5GB时,Java会给出错误提示。

java -Xmx1582m [my program]

可以,但是

java -Xmx1583m [my program]

报错了

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

我在Windows命令行和Eclipse中遇到了同样的错误。
以下是我的系统配置:
Windows 7(64位)
英特尔Core 2 Quad CPU
安装的RAM:8.00 GB
Java版本1.6.0
尽管我运行着64位操作系统且拥有8GB RAM,但只能设置1.5GB内存,这很奇怪。有没有办法解决这个问题?

你是在使用Windows版JRE还是Windows x64版? - Vineet Reynolds
请问在64位操作系统上,32位JVM的最大Java堆大小是多少? - Pops
我知道你说你有8GB的RAM,但错误信息的文本与“您正在使用比可用内存更大的堆”错误相匹配。我认为这可能是JVM的限制,但我仍在调查中。 - Pops
1
我的java -version显示:java版本“1.6.0_21” Java(TM) SE Runtime Environment (build 1.6.0_21-b07) Java HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing)我无法确定这是32位还是64位。 - Yufei Zhao
请查看此问题以获取有关JVM信息的详细信息:https://dev59.com/D3I95IYBdhLWcg3w_zQN - Pops
2个回答

5

可能的情况是,虽然您的操作系统是64位的,但您的JVM不是。打开命令行并键入java -version将给出详细版本信息,这应该表明您安装的JVM是32位还是64位构建。

64位JVM应该没有问题使用更高的内存限制。


啊,看起来安装64位的JDK就可以了!问题解决了!谢谢 :) - Yufei Zhao
1
很高兴听到这个消息。此外,我没有意识到32位JVM在使用“-version”时不会提到它是32位的(64位版本实际上会说它是64位的),对此我感到抱歉! - Tim Stone

-3

用于堆空间

-XX:MaxPermSize=64m

1
你能详细说明一下吗?运行 java -XX:MaxPermSize=64m -Xmx1583m [我的程序] 仍然会出现相同的错误。 - Yufei Zhao
1
-1 -XX:MaxPermSize 是用于永久代的。它的大小是与堆的其余部分分开计算的。 - fglez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接