Я использую Tomcat, и после остановки моего веб-приложения до сих пор имеется ссылка на экземпляр загрузчика классов моего веб-приложения.Вследствие этого заметный объем памяти (в основном связанный со статическими данными) не будет освобожден.Рано или поздно это приводит к OutOfMemoryError
.
. Я взял heap dump
и понял, что его держит глобальная ссылка JNI , которая предотвращает , что загрузчик классов будет сборщик мусора .
Мое приложение не использует JNI .Я также не использую Apache Tomcat Native Library .Я использую Sun / Oracle JDK.
Я хотел бы отследить причину / происхождение этой глобальной ссылки.(Я предполагаю, что JVM внутренне ссылается на загрузчик классов - но почему / где?).
Вопрос:
- Какие подходы / наборы инструментов существуют для достижения этой цели?
ОБНОВЛЕНИЕ
Кажется, что bestsss прав, и глобальные ссылки JNI были введенырежим отладки jvm.Это помогло мне, но не отвечает на вопрос, поэтому мне все еще любопытно получить ответ на вопрос, который может быть полезным в будущем.