Java JVM 对 --Xmx 的限制

标签 java windows memory jvm

我正在 Windows 10 计算机上通过

运行 Java 应用程序
JAVA -Xms1500M -Xmx1600M -jar appname.jar

应用程序在一段时间后失败,并出现错误,指出堆空间不足。当它使用任务管理器运行时,我可以看到我使用了机器上可用总内存的大约 50%。

如果我尝试增加 -Xmx 空间,则会收到一条错误消息,指出无法分配该空间 - 为什么会出现这种情况,因为有足够的可用内存?

Java 应用程序是第三方应用程序,我知道它在同事的电脑上运行

enter image description here

我的 JVM 版本是

enter image description here

最佳答案

我怀疑您正在运行 32 位 JVM。 (根据版本信息,您拥有 Oracle 版本,而 Java 8 是 Oracle 提供 32 位可下载的最后一个版本。)

假设情况确实如此,Windows 上 32 位 Java 的最大堆大小限制在 1.4 到 1.6GB 之间。该限制是 Windows 分配虚拟地址空间的方式造成的。欲了解更多详情,请阅读:

解决方案是下载并安装适用于 Windows 的 64 位 Java 版本。您需要下载“x86-64”架构。

(我注意到您正在运行 1.8.0_101。它于 2016 年 7 月发布,已经过时了。在撰写本文时,最新的 Java 8 版本是 1.8.0_231。)

<小时/>

The Java app is a 3rd party and I know it runs on colleagues pcs

他们可能安装了 64 位 Java。

关于Java JVM 对 --Xmx 的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59227155/

相关文章:

java - 将 Java 域对象映射到表的良好设计(使用 Hibernate)

c - Win32 C 运行时库中的文件元数据

c# - 是否可以编写一个看门狗进程来捕获应用程序崩溃?

c# - 从进程内存中读取 int

firefox - 如何获得缓存在 firefox 内存中的 mp3 文件?

java - 如何让 Android 按钮阵列的 onClickListener 正常工作

java - 如何使用Button自动向Firebase进行身份验证 - Java

Ruby on rails跨平台win/linux脚本

python - 到底是什么占用了这么多内存?

java - 在JPA中检查数据库