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