【发布时间】:2014-04-11 20:36:02
【问题描述】:
我有一个使用以下 jvm 选项的应用:
-Xmx512m -Xms256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:MaxGCPauseMillis=2 -XX:MaxDirectMemorySize=1G
我在具有 8GB RAM 的 Windows 7 x64 上运行它。当任务管理器说有 60% 的 RAM 正在使用时,我的程序就无法运行,Java 说“内存不足”。尽管理论上我还剩下将近 3gb 的空闲 RAM。下面是在 NetBeans 中分析我的项目的屏幕截图(直到它突然在随机点崩溃)。什么可能导致这些问题?我的程序真的那么贵吗?
(来源:SSmaker.ru)
(来源:SSmaker.ru)
【问题讨论】:
-
内存不足怎么办?不仅有可以触发它的堆,还有 permgen(我相信在 Java 8 中已删除)和地址空间不足 --> 请包括完整的堆栈跟踪
-
你在运行什么 JVM?此外,JVM 对其程序施加的内存限制与操作系统中的物理或虚拟内存量没有直接关系。
-
为什么你认为你有足够的内存? xmx512m 和 byte[] 用法大致相同
-
为什么字节数组中有这么多字节?
-
(“Bytes Allocated”的单位是什么,顺便说一句?显然不是单位字节。Kbytes?)