我使用的是 Azure 上具有 7GB RAM 的 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?我是否缺少任何设置?
最佳答案
这对我来说真的很愚蠢,但我找到了原因。
当我需要将内存参数放在 java 命令之后时,我已将内存参数放在整个命令行的末尾。
即而不是
java -jar "myapp.jar" "myArgs" -Xmx6g
我应该使用
java -Xmx6g -jar "myapp.jar" "myArgs"
关于java - Azure 上的 Windows Server 2012 上 JVM 64 最多使用 2GB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060045/