每15-30分钟,Netbeans显示“java.lang.OutOfMemoryError: PermGen space
”。根据我从谷歌学到的东西,这似乎与一般的类加载器泄漏或内存泄漏有关。
不幸的是,我发现的所有建议都与应用服务器有关,我不知道将它们改编为Netbeans。 (我甚至不确定这是同样的问题)
我的申请中有问题吗?我怎样才能找到来源?
答案 0 :(得分:32)
这是因为持续的类加载。
Java在永久堆中存储类字节代码和所有常量(例如字符串常量),默认情况下不是垃圾收集(这在大多数情况下都有意义,因为类在应用程序的生命周期中只加载一次)。 / p>
在通常在整个生命周期内加载类的应用程序:
您需要打开永久堆垃圾回收以防止此错误。
我使用选项
-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 leaks和How 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。