Java.lang.OutOfMemoryError:PermGen空间

4
我该如何预防这种情况?
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个回答

10

这个针对Tomcat的。它是一个相当糟糕的热发布/热部署工具,并且会出现内存泄漏问题。建议通过Eclipse中的服务器配置窗口关闭自动发布功能,只有在需要反映保存的更改时才手动重启Tomcat。如果您只有一个项目,重新启动不应花费太多时间。

例如,Glassfish在热发布方面要更加强大(并且更快!)。至于如何安装Glassfish并将其集成到Eclipse中进行JSF 2.0开发,请查看这个教程


啊哈,我明白了区别。如果自动发布开启,XHTML 的更改会在不重启服务器的情况下生效。如果关闭,则 XHTML 的更改不会反映出来,直到服务器重新启动。所以这是一个艰难的选择 :-) 我会看一下 GlassFish 服务器,再次感谢您! - gaffcz
我认为现代的Tomcat 7/8/9本身不再是“OutOfMemoryError: PermGen space”的原因。如果应用程序没有内存泄漏,那么<Context reloadable="true">会使开发更加愉快。 - gavenkoa

0

你需要为tomcat JVM的PermGenSpace分配更多的空间。

可以使用JVM参数-XX:MaxPermSize=128m来完成此操作。

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

另外,您可以使用JVisualVM监视PermGen空间的大小,甚至可以使用YourKit Java Profiler检查其内容。


-1

如果您的webapps文件夹中有更多的项目,就会出现此异常。删除一些项目,就不会出现此异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接