java.lang.OutOfMemoryError:PermGen空间

时间:2011-05-28 18:00:03

标签: java jsf garbage-collection richfaces

我该如何防止这种情况?

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

3 个答案:

答案 0 :(得分:10)

这是Tomcat特有的。这是一个糟糕的hotpublisher / hotdeployer,它遭受内存泄漏。我建议通过Eclipse中的服务器配置屏幕关闭自动发布,只要您想反映保存的更改,只需手动重启Tomcat。如果你只有一个项目,重启不应该花太多时间。

例如,Glassfish在热发布时更强大(更快!)。至于如何安装Glassfish并将其集成到Eclipse中以进行JSF 2.0开发,请检查this tutorial

答案 1 :(得分:0)

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

这可以使用JVM参数完成:-XX:MaxPermSize=128m

默认情况下,PermGen空间为64M(并且它包含所有已编译的类,因此如果类路径中有很多jar(类),则可能确实填充了此空间。)

在旁注中,您可以使用JVisualVM监控PermGen空间的大小,甚至可以使用YourKit Java Profiler检查其内容

答案 2 :(得分:-1)

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