设置Java堆大小在256GB RAM 64位计算机上无效。

8
我一直在尝试找到答案,但仍然无法解决问题。
我有一台64位机器,拥有256GB的内存。
我正在尝试执行一个连接到MySQL的Java程序。由于需要相当大的堆大小,因此当我使用VM参数-Xmx1024m时,几分钟后就会弹出以下内容:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

但是,当我尝试通过-Xmx2048m或更大的程序VM参数时,它不起作用,并显示以下错误信息:

Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap

我读到设置-Xmx2048在64位机器上不是问题,但我真的不知道为什么它在我的机器上无法工作。 java -version输出: enter image description here wmic OS get FreePhysicalMemory /Value输出:
FreePhysicalMemory=251663664

wmic computersystem get TotalPhysicalMemory 输出:

TotalPhysicalMemory
274811621376

wmic os get osarchitecture 输出结果为:

OSArchitecture
64-bit

我无法执行systeminfo|find "Memory",因为它报告语法错误。我也不知道是为什么。


1
在你的命令行上,java -version 的输出是什么? - jdphenix
1
如果您尝试使用“-Xmx64g”,会发生什么? - Matt
1
嗯,我们使用的是韩文版的Windows,这并不会让事情变得更容易 :) 总之,要点如下:确保您的操作系统是64位的,它“看到”了RAM(在任务管理器中检查),并且您的JVM也是64位的,然后您就可以开始了。否则,我就没有更多的想法了。抱歉。 - Matt
1
你可以前往控制面板 > 区域和语言来将语言环境从韩语改为英语或者你所偏好的语言。@Droidekas,那么拥有这么多内存有什么问题吗? - phuclv
2
这增加了另一层可能存在问题的因素。Eclipse 不一定使用 JAVA_HOME 中的 Java(这是我上次遇到类似问题的原因),请检查项目特定设置。此外,虽然我不确定,但使用 32 位 Eclipse 可能会导致此类问题。如果什么都不起作用,最好尝试使用 java -jar 从控制台运行程序,并查看问题是否仍然存在。 - Deltharis
显示剩余15条评论
2个回答

1
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

这条消息意味着Java堆没有足够的空间进行进一步的分配。你似乎将Xmx设置为1G,这对你的应用程序来说是不够的,否则应用程序可能会泄漏内存,占用Java堆中的空间。
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap

在VM初始化期间,JVM从堆到JIT模块进行各种初始化。Java堆是连续的空间,如果在初始化过程中JVM找不到所请求的Xmx的连续内存空间,则会抛出上述错误信息。
这些都是虚拟内存分配,因此请不要将其与物理内存值混淆。
请运行以下命令: java -verbose:init -Xmx2048 -version
此命令将告诉JVM进行初始化时经历的步骤,并在哪个步骤失败。

未引用的文本不要使用引用格式。如果是引用,请注明出处。 - user207421

0
考虑以管理员身份运行您的应用程序 - 只需通过右键单击启动PowerShell控制台 -> 以管理员身份运行。

Windows可能会拒绝为正在运行非提升的单个进程分配大量内存。

此外,您是否使用Windows Server或Windows的工作站版本?通常建议使用Windows Server来运行此类“大型”服务。


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