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

时间:2009-03-23 14:45:05

标签: java netbeans netbeans6.5 java-6

每15-30分钟,Netbeans显示“java.lang.OutOfMemoryError: PermGen space”。根据我从谷歌学到的东西,这似乎与一般的类加载器泄漏或内存泄漏有关。

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

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

5 个答案:

答案 0 :(得分:32)

这是因为持续的类加载。

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

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

  • 热重新部署期间的Web和应用程序服务器;
  • IDE在运行已开发的应用程序时(每次在Netbeans中运行Run按钮或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中的评论)。

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

如果您正在开发Web应用程序,请尝试使用服务器vm选项

-Xmx512m -Xms512m -XX:MaxPermSize = 512m

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

答案 4 :(得分:1)

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