У меня есть плохо работающее приложение, которое, кажется, утекает. После краткого исследования профайлером, большая часть памяти (80%) находится в java.lang.ref.Finalizer
экземплярах. Я подозреваю, что финализаторы не выполняются.
Общей причиной этого, похоже, являются исключения, выбрасываемые финализатором. Однако javadoc для метода finalize
класса Object
(см., например, здесь), кажется, противоречит сам себе: в нем говорится
Если метод finalize выбрасывает не пойманное исключение, исключение игнорируется и финализация этого объекта завершается.
но позже также говорится, что
Любое исключение, брошенное методом finalize, приводит к остановке финализации этого объекта, но в остальном игнорируется.
Чему я должен верить (т.е., остановлена ли финализация или нет?), и есть ли у вас какие-нибудь советы по исследованию таких очевидных утечек?
Спасибо