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

标签 java windows azure jvm

我使用的是 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/

相关文章:

windows - 有没有人让 plperl 在 Windows 上使用 Postgres 9.1?

azure - Visual Studio Team Services - 发布管理无法找到测试

java - Azure构建错误: "Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8"

java - 是否可以让 Hibernate 通过 ManyToMany 关系执行 OrderBy?

javascript - 同步从数组中删除值

c++ - Windows 中的 Qt Creator - 我如何知道正在使用哪个编译器?

cordova - 在 azure 移动服务(.net 后端)上使用 Ripple 身份验证失败

java - 如何创建虚拟磁盘空间以避免节省硬盘空间?

java - 将布局文件添加到类中(Java Android Studio)

windows - 更改 Docker 机器位置 - Windows