Как определить причину утечки глобальной справочной памяти JNI?

Я использую Tomcat, и после остановки моего веб-приложения все еще ссылка на экземпляр загрузчика классов моего веб-приложения. В результате значительный объем памяти (в основном связанный со статическими данными) не будет освобожден. Рано или поздно это приводит к ошибке OutOfMemoryError .

Я взял дамп кучи и понял, что он содержится в глобальной ссылке JNI , которая предотвращает , что загрузчик классов будет сборщиком мусора .

Мое приложение не использует JNI . Я также не использую собственную библиотеку Apache Tomcat . Я использую Sun / Oracle JDK.
Я хотел бы выяснить причину / происхождение этой глобальной ссылки. (Я предполагаю, что JVM внутренне ссылается на загрузчик классов - но почему / где?).

Вопрос:

  • Какие подходы / наборы инструментов существуют для этого?

ОБНОВЛЕНИЕ

Кажется, что bestsss верен глобальные ссылки JNI были введены в режиме отладки jvm. Это помогло мне, но не дает ответа на вопрос, поэтому мне все еще интересно получить ответ на вопрос, который может быть полезен в будущем.

10
задан MRalwasser 4 July 2011 в 15:10
поделиться