2011-05-28 29 views
4

我该如何防止这种情况?java.lang.OutOfMemoryError:PermGen空间

Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space 
Exception in thread "main" java.lang.OutOfMemoryError: PermGen space 
Exception in thread "Thread-2" java.lang.OutOfMemoryError: PermGen space 

这是发生例如,如果我经常重新加载数据表页。我的理解,有什么不对组与垃圾收集器..

我使用Eclipse的Java EE IDE,JSF2,richfaces4

回答

10

这是具体到Tomcat。这是一个可怜的hotpublisher/hotdeployer,它遭受内存泄漏。我建议通过Eclipse中的服务器配置屏幕关闭自动发布,并且只要您想反映已保存的更改,就手动重新启动Tomcat。如果只有一个项目,重新启动应该不会花费太多时间。

举例来说,Glassfish在热点出版时更健壮(而且速度更快!)。至于如何安装Glassfish并将其集成到Eclipse for JSF 2.0开发中,请检查this tutorial

+0

啊哈查看其内容,我看到了差距。如果启用自动发布,则xhtml中的更改无需重新启动服务器即可生效。如果关闭,则在服务器重新启动之前,不会反映xhtml中的更改。所以这是sophie的选择:-)我会看看glassfish服务器,再次感谢你! – gaffcz 2011-05-28 18:33:40

+0

我认为现代的Tomcat 7/8/9不再是'OutOfMemoryError:PermGen space'本身的原因。 '如果应用程序不存在内存泄漏,则使开发变得愉快。 – gavenkoa 2015-12-26 20:41:55

-1

如果您的webapps文件夹中的项目数量更多,则会出现此异常。请删除某些项目,此异常不会发生。

0

您必须为tomcat JVM的PermGenSpace分配更多空间。

这可以通过JVM参数来完成:-XX:MaxPermSize=128m

默认情况下,PermGen的空间为64M(及其包含的所有编译的类,因此,如果你在你的classpath中有很多罐子(类),你可能确实填补了这个空间)。

在一个侧面说明,您可以监视JVisualVM PermGen的空间的大小,你甚至可以用YourKit Java Profiler