【问题标题】:PermGen space error received when starting an application with Java 64 bit使用 Java 64 位启动应用程序时收到 PermGen 空间错误
【发布时间】:2012-06-18 16:03:09
【问题描述】:

我有一个 Eclipse(基于插件)应用程序,我尝试从一个 jnlp 文件(我使用 maven tycho 构建它)从 Java 64bit 开始。启动应用程序后不久,它不再响应,有时甚至会自动关闭。如果使用 Java 32bit 启动应用程序,应用程序工作正常。

如果我检查日志文件,我会得到 java.lang.OutOfMemoryError: PermGen space 异常。 我已将 MaxPermSize 增加到 756m,但仍然无法正常工作。我可以看到,当应用程序被阻塞时,CPU 几乎达到了 100% 的使用率。

如果您对我可以解决问题的方法或解释有任何建议,请分享。

谢谢!

【问题讨论】:

  • 请添加您使用的 JVM 参数的完整列表。
  • 您可以使用-XX:+PrintGCDetails -XX:+PrintGCTimeStamps 启用 GC 日志记录并向我们展示日志吗?
  • 当你在 Eclipse 中使用 64 位 JVM(即没有 jnlp)运行它时会发生什么?
  • 这是包含参数的标签:
  • 我还添加了参数-XX:+PrintGCDetails -XX:+PrintGCTimeStamps,但是在日志文件中我什么也没有。

标签: java 64-bit jnlp out-of-memory permgen


【解决方案1】:

加载许多类时,Perm 空间会被填满。

来自FAQ

如何判断永久代是否已满?

从 1.4.2 开始 -XX:+PrintGCDetails 将打印有关在每次垃圾回收时收集的堆的所有部分的信息。完整收藏

[Full GC [Tenured: 30437K->33739K(280576K), 0.7050569 secs] 106231K->33739K(362112K), [Perm : 2919K->2919K(16384K)], 0.7052334 secs]

这个例子表明永久代收集的很少(从收集前使用的 2919K 变为收集后使用的 2919K),永久代的当前大小为 16384K。

如果您遇到类加载器泄漏问题,您可能会对this article"how to fix" article 感兴趣。

【讨论】:

    【解决方案2】:

    我的解决方案是更改为 Java 1.7。我之前尝试过使用 Java 1.6.0_26_x64 和 Java 1.6.0_29_x64 并得到了上述错误。

    我现在已更改为 Java 1.7.0_04_x64,它运行顺畅,完全没有阻塞。

    编辑:它也适用于 Java 1.6.0_33。

    【讨论】:

      猜你喜欢
      • 2013-07-07
      • 1970-01-01
      • 2012-09-05
      • 2012-02-02
      • 2012-01-19
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多