我运行的是一台Windows2016(x64)服务器,内存为32gb。根据ResourceMonitor,内存Map如下:保留1mb,使用17376mb,修改96mb,待机4113mb,空闲11016mb。摘要:可用15280mb,缓存4210MB,总计32767mb,已安装32768mb
我想在8gb内存上运行java(64位jvm)服务: java -Xms8192m -Xmx8192m -XX:MaxMetaspaceSize=128m ...
结果是
Error occurred during initialization of VM
Could not reserve enough space for object heap
我知道32位操作系统和32位jvm会限制可用堆,但我验证了它们都是64位的。我读到在32位windows/jvm上,堆必须是连续的。但在这里,我甚至希望能够为堆分配15gb,因为超过15gb是“可用的”(对谁/什么可用?)。
页面文件大小是自动管理的,当前为7680mb。
我很感激有人能解释为什么windows拒绝提供内存(或者为什么java不能使用内存),还有我的选择(除了调整主机的大小或者使用4gb之类的内存,这对服务来说是可行的,但是不够)。
我试过重新启动服务器,但当轮到这个服务启动时,其他服务已经“工作”了相当多的内存。
编辑:我注意到资源监视器有一个名为“提交费用”的图表,超过90%。任务管理器有一个“committed”行(现在)列出32,9/40,6gb。commit charge解释了这个术语,是的,我已经看到了上面提到的虚拟内存弹出窗口。似乎出于一个我不知道的原因,一个非常高的提交费用已经积累起来,并阻止8gbjava启动。这就更加强调了一个问题:“15GB可用”内存意味着什么?如果不是进程的话,它对谁是可用的?
暂无答案!
目前还没有任何答案,快来回答吧!