我知道这是一个常见的问题/难题。我想知道从哪里开始解决这个问题。
在Windows Server 2008上运行Java,我们有65GB的内存,显示25GB是空闲的。(目前有几个人正在运行进程)。
systeminfo | grep -i memory
显示:
总物理内存:65536 MB 可用物理内存:26512 MB 虚拟内存:最大大小为69630 MB 虚拟内存:可用299 MB 虚拟内存:已使用69331 MB。
我只是想知道如何解决这个问题。
- 我应该从哪里开始?
- 更多的虚拟内存被使用而不是物理内存是什么意思,这是导致Java无法启动的原因吗?
- Java是否想要使用虚拟内存而不是物理内存?
java-version
给了我以下错误信息:
初始化VM时出错,无法为对象堆保留足够的空间
更具体的问题:
- JVM为什么不想使用可用的物理内存?
- 如果不指定Xms参数,Java命令(如
java-version
)要使用多少内存? - 是否只分配更多的虚拟内存是解决问题的好方法?
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)
- dwjohnston-Xms64m
是您的初始堆设置。如果超过可用内存,就会出现您描述的错误。我不确定详细情况,但我认为内存也必须是连续的。 - Ryan Stewartjava -Xms4g -Xmx4g -version
可以工作,但是java -Xms16g -Xmx16g -version
会给我空间错误。为什么它不使用那个物理内存呢? - dwjohnston