Tomcat WebappClassloader未被垃圾收集

Tomcat WebappClassloader未被垃圾收集,tomcat,garbage-collection,classloader,Tomcat,Garbage Collection,Classloader,我正试图追踪我的web应用程序中的内存泄漏,它导致PermGen空间填满并抛出OfMemoryError:PermGen大小在几次重新加载后。现在我知道我可以停止/启动整个Tomcat实例,但我正试图找出内存泄漏的原因 我读过这篇文章,其中指出我必须确保在停止应用程序后,不会有对WebappClassLoader的未完成引用,这将防止它被垃圾收集。使用YourKit和内存分析器,我在第三方LIB中发现了一些这样的情况,并修复了它们 现在,两个工具都报告没有“从GC根到对象(WebappClass

我正试图追踪我的web应用程序中的内存泄漏,它导致PermGen空间填满并抛出OfMemoryError:PermGen大小在几次重新加载后。现在我知道我可以停止/启动整个Tomcat实例,但我正试图找出内存泄漏的原因

我读过这篇文章,其中指出我必须确保在停止应用程序后,不会有对WebappClassLoader的未完成引用,这将防止它被垃圾收集。使用YourKit和内存分析器,我在第三方LIB中发现了一些这样的情况,并修复了它们

现在,两个工具都报告没有“从GC根到对象(WebappClassloader)的路径”,但WebappClassloader仍然没有被垃圾收集!以前有人遇到过这样的事情吗


我正在使用Tomcat 6.0.32

很抱歉,我之前没有解决此问题

我已经消除了WebappClassloader的所有GC根,但它只是没有被垃圾收集。我试着强制垃圾收集,但没有用

问题是调用
Runtime.getRuntime().gc()
并不能保证所有可能的东西都会被垃圾收集——只是JVM会尽最大努力做到这一点


在多次重新加载Tomcat之后,JVM的PermGen空间开始不足,WebappClassloader确实被垃圾收集。我假设JVM之前没有GC它,因为它不需要。

Tomcat提到的XML解析的来源可以将web应用程序类装入器固定在内存中。这尤其令人讨厌,因为探查器(至少是YourKit和Eclipse MAT)没有识别任何与此相关的GC根。“所以我知道这可能发生,但当它发生时该怎么办?在YourKit没有显示任何更明显的GC根之后,帮助我的是强制使用GC(使用YourKit、JConsole等),拍摄内存快照并在其中搜索我们自己的任何类——这些类通常暗示内存泄漏的来源。谢谢,我将尝试一下,并让您知道结果!