我有一个由spring/hibernate开发的Web服务,当我在Tomcat 7上多次部署和取消部署时,我得到了outOfMemoryError PermGen内存泄漏。
通过使用java VisualVM,我注意到之前的webappClassLoader仍然保留在JVM中,因此它们没有被垃圾收集。
这个问题的原因可能是什么?
如何检测哪些对象仍然引用应用程序类加载器或它加载的任何对象?
谢谢,
简单的回答是你有内存泄漏。根据经验,这很可能位于您的 Web 应用程序或其正在使用的库中。您也有可能在 Tomcat 中发现内存泄漏,但可能性不大。
追踪内存泄漏的简短版本是:
找到内存泄漏的根本原因可能会有点困难。
有关如何追踪此类内存泄漏以及可能导致其发生的原因的更完整说明,请参阅此演示文稿:https://tomcat.apache.org/presentations/2010-08-05-javaone-Memory-Leaks-60mins .pdf