【问题标题】:'Could not reserve enough space for object heap' when running java -version运行 java -version 时“无法为对象堆保留足够的空间”
【发布时间】:2013-02-02 08:00:52
【问题描述】:

我知道这是一个常见的问题/问题。我想知道从哪里开始。

在 windows server 2008 上运行 java,我们有 65GB 内存,它显示 25GB 可用。 (目前有几个人正在运行进程)。

systeminfo | grep -i memory

显示:

总物理内存:65、536 MB 可用物理内存:26,512MB 虚拟内存:最大大小 69,630 MB 虚拟内存:可用 299 MB 虚拟内存:使用中:69、331 MB。

真的只是想知道我如何解决这个问题。

  • 我从哪里开始?
  • 更多的虚拟内存是什么意思 比物理内存使用,这就是java无法启动的原因吗?
  • 可以 java想使用虚拟内存而不是物理内存?

java -version

给我:

Error occured during initialization of VM could not reserve enough space for object heap

更具体的问题:

  • 为什么 JVM 不想使用空闲的物理内存?
  • 如果不指定 Xms 参数,java 命令(如java -version)要使用多少内存?
  • 简单地分配更多的虚拟内存是解决问题的好方法吗?

【问题讨论】:

  • 您使用的是 64 位 VM 还是 32 位 VM?
  • java -version 用于位。另外,您的初始堆当前设置为多少?
  • 我不能做java -version 它给了我空间错误。 (当我调用java -version 时实际发生了什么?它是在创建一个JVM,然后从那个JVM 中找出它的版本吗?)。不确定初始堆是什么意思,我该如何找到?
  • 使用java -Xms64m -Xmx64m -version 我得到java version "1.7.0_07" SE Runtime envrionment <build 1.7.0_07-b10> Java HotSpot 64-bit server VM (build 23.3-b01, mixed mode)

标签: java memory windows-server-2008 virtual-memory


【解决方案1】:

正如我在遇到类似问题时发现的(尽管系统上的内存要少得多——请参阅 Cannot run a 64-bit JVM in 64-bit Windows 7 with a large heap size),在 Windows 上,JVM 将尝试分配一个 连续 内存块.

所以我敢打赌,虽然你有足够的内存,但你没有足够的连续内存。

【讨论】:

  • 内存不连续有什么关系?是否可以告诉java不要寻找连续的内存?
  • 这很重要,因为这正是 JVM 想要的。它尝试分配内存全有或全无。例如,请参阅stackoverflow.com/a/497961/411393,了解 JVM 为什么需要连续内存(这也意味着无法告诉它不需要它)。
  • 好的,那么我该怎么做才能确保内存是连续的?我在系统里有很多。另外,我认为对于虚拟内存计算机,程序会呈现一个虚拟的连续内存块,并且程序不会知道(或关心)实际内存是否连续。
【解决方案2】:

至少可以看到java版本运行 java -Xmx64m -版本 如果需要,这应该向您显示版本。然后您可以尝试增加 Xmx 并查看它失败的值

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。通过分析,我们发现机器的交换空间很小。 请增加交换空间并验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2013-08-05
      • 2013-01-17
      • 2017-05-04
      • 2013-11-04
      • 2023-03-18
      相关资源
      最近更新 更多