【问题标题】:Java goes OutOfMemory even with enough RAM即使有足够的 RAM,Java 也会出现 OutOfMemory
【发布时间】: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?)

标签: java windows


【解决方案1】:

您应该贪婪地分配所需的最低开销。那是, 使用 -Xms1g -XMx1g 之类的东西,所以当你的应用真正开始运行时, 它已经保留了它的最大堆使用量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多