如何防止 Netbeans 中的 PermGen 空间错误?

2022-09-01 15:40:04

每 15-30 分钟,Netbeans 就会显示一个 “”。从我从Google学到的东西来看,这似乎与类加载器泄漏或内存泄漏有关。java.lang.OutOfMemoryError: PermGen space

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

我的申请有问题吗?如何找到来源?


答案 1

这是因为不断的类加载。

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

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

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

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

我使用选项

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

(阻止了我的 eclipse 3.4 抛出 “”,所以它也应该与 netbeans 一起使用)。java.lang.OutOfMemoryError: PermGen space

编辑:请注意,对于 Netbeans,您可以在中设置这些选项:您应该为这些选项添加前缀并添加它们(有关详细信息,请参阅 中的注释)。[Netbeans installation]\etc\netbeans.conf-Jnetbeans_default_optionsnetbeans.conf


答案 2

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


推荐