猿问

处理“java.lang.OutOfMemoryError:PermGen space”错误

处理“java.lang.OutOfMemoryError:PermGen space”错误

最近,我在我的web应用程序中遇到了这个错误:

java.lang.OutOfMemoryError:PermGen空间

这是一个典型的Hibernate/JPA+IceFaces/JSF应用程序,运行在Tomcat 6和JDK1.6上。显然,这可能发生在重新部署应用程序几次之后。

是什么原因造成的,如何避免呢?我该怎么解决这个问题?


开心每一天1111
浏览 519回答 4
4回答

慕侠2389804

你最好试试-XX:MaxPermSize=128M而不是-XX:MaxPermGen=128M.我不知道这个内存池的确切使用情况,但它与加载到JVM中的类的数量有关。(因此,为tomcat启用类卸载可以解决问题。)如果应用程序在运行过程中生成和编译类,则更可能需要一个比默认内存池更大的内存池。

料青山看我应如是

多个部署后发生的应用服务器PermGen错误很可能是由容器对旧应用程序类加载器的引用引起的。例如,使用自定义日志级别类将导致应用服务器的类加载器保留引用。您可以通过使用jmap和jhat等现代(JDK 6+)JVM分析工具来检测这些类间的漏洞,并重新设计或取消它们的使用。通常的嫌疑人是数据库、记录器和其他基础框架级别的库。看见类加载器泄漏:可怕的“java.lang.OutOfMemoryError:PermGen space”异常,特别是后续员额.
随时随地看视频慕课网APP

相关分类

Java
我要回答