gpt4 book ai didi

java - 64 位 JVM 无法为对象堆保留足够的空间

转载 作者:行者123 更新时间:2023-11-30 07:01:00 27 4
gpt4 key购买 nike

我有一台 Windows 7 笔记本电脑,配备 16GB RAM。当我运行多个 java 服务器时,我收到 OutOfMemory 错误,但是,Windows 任务管理器显示我仍然有 6GB 的可用物理内存。在我看来,我的 JVM 只能为所有正在运行的 Java 应用程序分配 ~2GB 堆。

所以我写了一些非常简单的Java代码:

public class HelloWorld {
public static void main(String[] args) {
for(;;) System.out.println("Hello, World");
}
}

我的-jvm版本:

$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

JAVA_HOME“C:\Program Files\Java\jdk1.8.0_111”

JRE_HOME“C:\Program Files\Java\jre1.8.0_111”

我做了一个简单的java -Xmx256m -Xms256m HelloWorld并且它按预期工作,但是当我切换到java -Xmx2048m -Xms2048m HelloWorld时我得到以下信息:

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

我尝试了多个 JDK,但都不起作用。 Windows和JVM都是64位的。

我可以做什么来解决这个问题?

最佳答案

It seems like to me that my JVM can only allocate ~2GB heap for all running java apps.

这是不正确的。 JVM 能够请求并使用 >2GB 的堆。

Windows 肯定限制了 Java 进程的请求。也可能是 Windows 为多个 Java 进程保留了内存,但该内存显示为空闲,因为 JVM 尚未使用它。

FWIW,使用比实际需要更多的内存运行 JVM 并不是一个好主意。

修复?

  1. 别这样做。不要在笔记本电脑上运行大量 2GB Java 服务器,或者将堆大小减小到更合理的大小。过度使用内存是一个很有吸引力的想法,直到 JVM 开始使用您分配给它们的所有内存为止。然后你的系统就会崩溃......

  2. 以不同的方式去做。您可以在单个 JVM 中运行多个服务器。

  3. 获取更多内存。

关于java - 64 位 JVM 无法为对象堆保留足够的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40941522/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com