我正在尝试运行具有超过 1024M 堆空间的某个 java 程序。即使我有 4GB 的 RAM 和 32 位操作系统,它说最大是 1024M。下面是我试图用来启动程序的批处理代码:
@echo off
java -Xmx2048M -Xms2048M -jar program.jar
有人可以解释为什么我会收到 JVM“无法保留足够的空间”错误吗?
我正在尝试运行具有超过 1024M 堆空间的某个 java 程序。即使我有 4GB 的 RAM 和 32 位操作系统,它说最大是 1024M。下面是我试图用来启动程序的批处理代码:
@echo off
java -Xmx2048M -Xms2048M -jar program.jar
有人可以解释为什么我会收到 JVM“无法保留足够的空间”错误吗?
您在 Windows 上,单个 32 位程序可以拥有的最大地址空间为 2GB。现在,由于进程和系统需要其中的一些来处理家务(例如 .dll),因此您不能将所有这些 2GB 用于 Java 堆。所以尝试使用更少的内存,例如 1.5 GB。
您可以通过引导开关让 32 位程序获得 3GB 的地址空间,请参见此处,如果您确实需要更多堆空间,这可以替代切换到 64 位操作系统。
您收到“无法保留足够的空间”错误,因为在您的 2048M 大小的 RAM 中必须没有可用的连续内存块。我建议您将 -Xms 减少到 512M,因为我认为最初您不需要 2048M 堆空间。如果这不起作用,那么您将需要减少 -Xmx 值。