我有一个由spring / hibernate开发的Web服务,当我多次在Tomcat 7上进行部署和取消部署时,我得到一个outOfMemoryError PermGen内存泄漏。
通过使用java VisualVM,我注意到之前的webappClassLoader仍保留在JVM中,因此它们不会被垃圾回收。
这个问题可能是什么原因?
如何检测哪些对象仍然引用了应用程序类加载器或由它加载的任何对象?
谢谢,
答案 0 :(得分:4)
简短的回答是你有内存泄漏。根据经验,这很可能是在您的Web应用程序或它正在使用的库中。在Tomcat中发现内存泄漏也是可能的,但不太可能。
用于跟踪内存泄漏的简短版本是:
找出内存泄漏的根本原因可能会有点困难。
有关如何追踪此类内存泄漏的更详细说明以及可能导致他们看到此演示文稿的内容:http://people.apache.org/~markt/presentations/2010-08-05-Memory-Leaks-JavaOne-60mins.pdf