我们在Windows上使用此选项时遇到了一些奇怪的行为。我们运行一些非常强大的服务器(考虑196GB RAM)。Windows版本是Windows Server 2008R2。
Java版本为1.6.0_18,64位(显然)。
无论如何,我们遇到了一些奇怪的错误,即使进程使用的内存比-Xmx设置指定的内存少得多,进程也会退出并报告内存不足异常。
因此,我们编写了一个简单的程序,每次按回车键时都会分配1GB的字节数组,并将字节数组初始化为随机值(以防止任何内存压缩等)。
基本上,如果我们使用-Xmx35000m(大约35 GB)运行程序,则在达到25 GB的进程空间(使用Windows任务管理器进行测量)时会出现内存不足异常。顺便说一下,我们分配了24 GB的1 GB块后就会达到这个限制。
仅仅指定更大的-Xmx选项值就可以让程序正常工作到更大的内存量。
那么,到底发生了什么?-Xmx是否关闭了?顺便说一句:我们需要指定-Xmx55000m才能获得35 GB的进程空间...
有关正在发生什么的任何想法吗?
Windows JVM中是否存在错误?
即使-Xmx选项与进程情况之间存在不一致,将-Xmx选项设置得更大是否安全?
NewRatio
,否则你基本上不会使用年轻代来处理如此巨大的对象。尝试使用明显较小的byte[]进行测试,结果将会改善。 - bestsss