[英]JVM 64 is using a maximum of 2GB on Windows Server 2012 on Azure
我正在使用Azure上的7GB内存的Windows 2012服务器。 我在机器上安装了64位java。
运行jvm时,我通过参数将最大堆大小设置为4GB
-Xmx6g
但是,当我运行我的jar时,会遇到java OutOfMemory异常。 我在任务管理器运行时检查了它,它显示用于进程的内存峰值大约为2GB,并且永远不会超过它。 尽管我设置了6GB的大小。
在我的本地PC上,我使用的是带有8GM内存的Windows 7机器,我没有遇到这个问题。
我在我的java应用程序中使用了以下命令
System.out.println(System.getProperty("sun.arch.data.model"));
System.out.println("Max Memory: " + Runtime.getRuntime().maxMemory());
它给了我以下内容:
Windows Server 2012
64
1670381568
本地PC
64
6681001984
为什么Windows Server没有为JVM分配全部内存? 有什么设置让我失踪吗?
这对我来说真是愚蠢和愚蠢,但我找出了它的原因。
当我需要在java命令之后放置内存参数时,我已将内存参数放在我的整个命令行的末尾。
即代替
java -jar "myapp.jar" "myArgs" -Xmx6g
我应该用过
java -Xmx6g -jar "myapp.jar" "myArgs"
不考虑-Xmx参数,或者不允许进程从OS获取更多RAM。
我的建议:
注意:我会使用评论,因为这实际上不是一个解决方案,但我还没有得分。 如果这不是正确的贡献方式,我道歉。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.