我正在使用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
本地电脑
64
6681001984
为什么Windows Server没有为JVM分配全部内存?我有什么设置吗?
答案 0 :(得分:1)
这对我来说真是愚蠢和愚蠢,但我找出了原因。
当我需要在java命令之后放置内存参数时,我已将内存参数放在整个命令行的末尾。
即。而不是
java -jar "myapp.jar" "myArgs" -Xmx6g
我应该用
java -Xmx6g -jar "myapp.jar" "myArgs"
答案 1 :(得分:0)
不考虑-Xmx参数,或者不允许进程从操作系统获取更多RAM。
我的建议:
注意:我会使用评论,因为这实际上不是一个解决方案,但我还没有得分。如果这不是正确的贡献方式,我道歉。