我正在 Windows 10 计算机上通过
运行 Java 应用程序JAVA -Xms1500M -Xmx1600M -jar appname.jar
应用程序在一段时间后失败,并出现错误,指出堆空间不足。当它使用任务管理器运行时,我可以看到我使用了机器上可用总内存的大约 50%。
如果我尝试增加 -Xmx 空间,则会收到一条错误消息,指出无法分配该空间 - 为什么会出现这种情况,因为有足够的可用内存?
Java 应用程序是第三方应用程序,我知道它在同事的电脑上运行
我的 JVM 版本是
最佳答案
我怀疑您正在运行 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/