【问题标题】:Java out of memory on 64-bit jvm64 位 jvm 上的 Java 内存不足
【发布时间】:2012-09-08 23:25:50
【问题描述】:

我有一个问题。我的程序真的很大,java 正在抛出 OutOfMemoryException。 在.bat 文件中,我有以下内容:

java -server -Dfile.encoding=UTF-8 -Xmx1500m -Xbootclasspath/p:../libs/l2ft.jar -cp config/xml;../libs/*; l2ft.gameserver.GameServer

Java 正在使用我的 6 GB RAM,接下来的 6 GB 没有使用。

我输入了System.getProperty("sun.arch.data.model");,它说我使用的是 64 位 JVM。

【问题讨论】:

  • 尝试增加 Xmx(最大堆)。您当前的设置不到 1.5GB。
  • 你怎么知道它正在使用 6GB 的 RAM? “下一个 6 GB 未使用”是什么意思?

标签: java memory jvm out-of-memory


【解决方案1】:

您已将最大堆大小设置为 1500m,而 JVM 可以使用比大约 200 MB 多一点的空间,这就是您对进程的限制。

尝试将进度限制在 5 GB 左右。 (您想为开销和操作系统留一些内存)

-mx5g

【讨论】:

    【解决方案2】:

    Xbootclasspath这个之前做选项:

    java -XX:MaxPermSize=512m -server -Dfile.encoding=UTF-8 -Xmx8g -XX:+UseCompressedOops
    

    这将使它使用更多内存,并确保它使用尽可能少的内存来寻址 64 位机器中的对象。

    -XX:MaxPermSize=512m 使 perm gem 空间更大(您可能需要使用大量堆内存),-XX:+UseCompressedOops 将使其对对象使用 32 位寻址,而不是 64 位,作为8gb 堆可以用 32 位正确寻址,因此它可以减少分配对象时使用的内存。

    【讨论】:

    • 我很好奇,为什么这被否决了?这个答案有问题吗?
    • 谁知道?还有另一个答案也是正确的并且被否决了。楼主好像删了。
    • 恕我直言,在这种情况下设置 MaxPermSize 有点过早优化。到目前为止,没有迹象表明该主题启动器存在 PermGen 不足。
    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2011-04-13
    • 2012-07-15
    • 2014-05-07
    • 2018-10-25
    相关资源
    最近更新 更多