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

Dan*_*ski 27 java netbeans netbeans6.5 java-6

每隔15-30分钟,Netbeans会显示一个" java.lang.OutOfMemoryError: PermGen space".从我从谷歌那里学到的东西,这似乎与一般的类加载器泄漏或内存泄漏有关.

不幸的是,我发现的所有建议都与应用程序服务器有关,我不知道它们是否适用于Netbeans.(我甚至不确定它是同一个问题)

这是我申请中的问题吗?我怎样才能找到来源?

Łuk*_*nik 32

这是因为恒定的类加载.

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

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

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

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

我用的是选项

-XX:MaxPermSize=256M
-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled
Run Code Online (Sandbox Code Playgroud)

(停止了我的eclipse 3.4投掷" java.lang.OutOfMemoryError: PermGen space"所以它也应该与netbeans一起工作).

编辑:请注意,对于Netbeans,您可以在以下位置设置这些选项:[Netbeans installation]\etc\netbeans.conf 您应该将这些选项作为 前缀-J并添加它们netbeans_default_options(netbeans.conf有关更多信息,请参阅注释).