【问题标题】:How can I prevent PermGen space errors in Netbeans?如何防止 Netbeans 中的 PermGen 空间错误?
【发布时间】:2010-10-14 23:46:42
【问题描述】:

Netbeans 每 15-30 分钟显示一个“java.lang.OutOfMemoryError: PermGen space”。根据我从 Google 那里了解到的情况,这似乎与一般的类加载器泄漏或内存泄漏有关。

不幸的是,我发现的所有建议都与应用程序服务器有关,我不知道将它们调整到 Netbeans。 (我什至不确定是不是同样的问题)

我的应用程序有问题吗?如何找到来源?

【问题讨论】:

  • 为什么不升级到最新版本的 NetBeans? 6.5 真的很老了。
  • @a_horse_with_no_name:这个问题也是如此。三年前我问过这个问题。

标签: java netbeans netbeans6.5 java-6


【解决方案1】:

请参阅link,了解如何设置 PermSize 的大小。很可能这不是您的代码的问题,因此唯一的解决方案是增加 PermSize。当您使用 JAXB 时,我发现这很常见。一般来说,如果你使用很多库,而这些库本身也依赖于许多其他 jar 文件,那么 PermGen 空间的默认大小可能不够大。

有关详细信息,请参阅这些博客文章:Classloader leaksHow to fix the dreaded "java.lang.OutOfMemoryError: PermGen space"

【讨论】:

    【解决方案2】:

    您可以通过编辑文件 /etc/netbeans.conf 来更改 netbeans JVM 的启动选项。 我在开发 Webapp 并经常部署它时经常会遇到这种错误。那样的话,我会时不时重启一下tomcat。

    【讨论】:

      【解决方案3】:

      尝试在 netbeans netconf 中添加以下参数:-J-XX:MaxPermSize=256m

      【讨论】:

        【解决方案4】:

        这是因为不断的类加载。

        Java 将类字节码和所有常量(例如字符串常量)存储在默认情况下不会被垃圾收集的永久堆中(这在大多数情况下是有意义的,因为类在应用程序的生命周期中只加载一次)。

        在通常在整个生命周期内加载类的应用程序中:

        • 热重新部署期间的 Web 和应用程序服务器;
        • IDE 在运行已开发的应用程序时(每次您在 Netbeans 或 eclipse 中点击“运行”按钮时,它都会重新加载应用程序的类);
        • 等 这种行为是不恰当的,因为堆最终会填满。

        您需要开启永久堆垃圾回收以防止出现此错误。

        我使用选项

        -XX:MaxPermSize=256M
        -XX:+CMSClassUnloadingEnabled
        -XX:+CMSPermGenSweepingEnabled
        

        (阻止我的 Eclipse 3.4 抛出“java.lang.OutOfMemoryError: PermGen space”,因此它也应该适用于 netbeans)。

        编辑:请注意,对于 Netbeans,您在以下位置设置了这些选项: [Netbeans installation]\etc\netbeans.conf 您应该在这些选项前面加上 -J 并将它们添加到 netbeans_default_options(有关更多信息,请参阅 netbeans.conf 中的 cmets)。

        【讨论】:

        • 好的,没有一个答案真的有帮助,但是这个答案让我在重新启动之间获得了最多的时间:)
        • 尝试将 MaxPermSize 增加到 512M 或更大,因为如果应用程序绑定存储的空间超过了它可以包含的内容(活动的永久对象的数量超过永久堆容量),垃圾收集永久堆仍然无济于事
        • 这些参数似乎对我有用(在我的例子中是 rt.jar 的字节码分析),但是,我确实收到了警告 Please use CMSClassUnloadingEnabled in place of CMSPermGenSweepingEnabled in the future。不过仍然有效。
        • 一件事;在 netbeans 中,run 和 deploy run 对我有用,就像它使堆为空但部署和部署不会正确清空堆
        【解决方案5】:

        如果你正在开发一个 web 应用程序,试着把服务器 vm 选项放上

        -Xmx512m -Xms512m -XX:MaxPermSize=512m

        转到工具/服务器//平台/VM 选项 (Netbeans 7.4)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-15
          • 2012-05-10
          • 1970-01-01
          • 1970-01-01
          • 2011-12-02
          • 1970-01-01
          相关资源
          最近更新 更多