JVM 64在Azure上的Windows Server 2012上最多使用2GB

时间:2014-07-31 13:24:53

标签: java windows azure jvm

我正在使用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分配全部内存?我有什么设置吗?

2 个答案:

答案 0 :(得分:1)

这对我来说真是愚蠢和愚蠢,但我找出了原因。

当我需要在java命令之后放置内存参数时,我已将内存参数放在整个命令行的末尾。

即。而不是

java -jar "myapp.jar" "myArgs" -Xmx6g 

我应该用

java -Xmx6g -jar "myapp.jar" "myArgs"

答案 1 :(得分:0)

不考虑-Xmx参数,或者不允许进程从操作系统获取更多RAM。

我的建议:

注意:我会使用评论,因为这实际上不是一个解决方案,但我还没有得分。如果这不是正确的贡献方式,我道歉。