运行 java -version 时“无法为对象堆保留足够的空间”

dwj*_*ton 5 java memory virtual-memory windows-server-2008

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

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

Qua*_*nic 0

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

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

  • 这很重要,因为这就是 JVM 想要的。它尝试分配全部内存或不分配内存。例如,请参阅http://stackoverflow.com/a/497961/411393,了解为什么 JVM 需要连续内存(这也意味着没有办法告诉它不需要它)。 (2认同)