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

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

是我的应用程序有问题吗?我怎样才能找到来源?

有帮助吗?

解决方案

这是因为不断的类加载。

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 了解更多信息)。

其他提示

尝试以下参数添加到netbeans的NETCONF:-J-XX:MaxPermSize参数=256米

请参阅此链接如何设置PermSize的大小。最有可能,这不是你的代码的问题,所以唯一的解决办法是增加的PermSize。我发现,这是很经常,当你和JAXB工作。在一般情况下,如果你使用的许多库本身也依赖于许多其他的jar文件,PermGen的空间的默认大小可能不够大。

请参阅这些博客文章了解详情:类加载器泄漏如何修复可怕的 “java.lang.OutOfMemoryError:PermGen的空间”

如果你正在开发一个Web应用程序,试图把服务器上的虚拟机选项

-Xmx512m -Xms512m -XX:MaxPermSize参数=512米

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

您可以通过编辑文件/etc/netbeans.conf更改NetBeans的JVM的启动选项。 我经常有这样的错误,当我开发web应用程序,我经常部署。在这种情况下,我重新启动Tomcat不时。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top