【问题标题】:Could not reserve enough space for object heap to start JVM无法为对象堆保留足够的空间来启动 JVM
【发布时间】:2023-03-13 01:28:01
【问题描述】:

刚刚遇到奇怪的问题。当我输入时

java -version

我明白了

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

.

java -Xms64m -Xmx64m -version

这个命令很好用

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode)

如果我将 xms、xmx 更改为 128m,我会再次出错。

使用top 命令和free -m 我可以看到,我获得了超过 192 mb 的可用空间,那么为什么我仍然会收到此错误?

Mem:    262144k total,    64760k used,   197384k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

谢谢

【问题讨论】:

  • 我今天突然遇到了这个问题——原来我已经切换到 OpenJDK JRE 7。通常我使用的 Oracle JDK 8 没有出现这个问题——至少在少数 VM 上没有。

标签: java linux memory jvm


【解决方案1】:

在 64 位环境中使用 32 位版本的 java 时,我遇到了同样的问题。在 64 位操作系统中使用 64 位 java 时没问题。

【讨论】:

  • 我也有同样的问题。在 64 位系统上使用 32 位 Java。从 Xmx1024 开始导致上述错误。从 Xmx512 开始工作正常!
  • 我遇到了同样的问题。我在 64 位 PC 上使用 32 位 JRE。我把JRE换成64位系统,问题就解决了。
【解决方案2】:

根据this post这个错误信息的意思是:

堆大小大于计算机的物理内存。

编辑: 我想,堆并不是唯一保留的内存。至少还有其他 JVM 设置,如 PermGenSpace 要求内存。堆大小为 128M,PermGenSpace 为 64M,您已经填满了可用空间。

为什么不缩小其他内存设置以释放堆空间?

【讨论】:

    【解决方案3】:

    您尝试运行它的机器似乎只有 256 MB 内存。

    也许 JVM 试图分配一个大的、连续的 64 MB 内存块。您可用的 192 MB 可能会被分割成更小的部分,因此没有 64 MB 的连续块可供分配。

    尝试使用较小的堆大小启动 Java 程序,例如:

    java -Xms16m ...
    

    【讨论】:

    • 是的,我的机器只有 256 mb,使用 -Xms16m 和 -Xms64m 可以正常工作。但是 64 还不足以满足我的需求。它可以以某种方式修复,所以我可以使用 128 mb 吗?
    • 请注意,-Xms 设置初始堆大小(-Xmx 设置最大堆大小)。您的程序真的需要 64 MB 的 initial 堆大小吗?为什么不让 JVM 自动增长呢?
    • 是的,我知道。但这并不重要。由于 java -Xms16m -Xmx128m -version 也失败了
    • 如果计算机只有 256 MB RAM,为 Java 堆分配 128 MB 会很困难。操作系统等也需要内存。
    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 2021-05-16
    • 2012-12-11
    • 2014-02-28
    • 2010-11-06
    • 2013-01-17
    相关资源
    最近更新 更多