Я пытаюсь избавиться от утечек памяти. Я бы хотел сбросить все статические переменные всех классов (не только мои) из загрузчика классов. Существует атрибут classes
, в котором перечислены все классы, известные ClassLoader.Как узнать, была ли запущена инициализация статического блока?
Так что я просто хочу перевернуть его и с отражением установить статические переменные в null.
Проблема в том, что все эти классы необязательно были инициализированы (инициализация статического блока не запускалась). Поскольку целью является сброс значений, а затем выгрузка классов, нет смысла инициализировать эти классы. Более того, когда я возвращаю класс ROOT, который используется в SBI другого класса CHILD, запуск SBI ребенка может привести к неожиданному поведению ...
Итак, вопрос: есть ли способ узнать, есть ли ВОО был запущен JVM или нет.
Примечание:
никому предлагающего использовать findLoadedClass в ClassLoader, есть в описании это важное предложение: * В этом посте есть важное замечание: «загружены» Безразлично» t означает «инициализировано». инициализация происходит только в точных моментах, определенных JLS3 $ 12.4.1 *
http://stackoverflow.com/questions/3678579/how-to-check-whether-a-class-is-initialized Я думаю, что это, что ты поиск – LionC
Как вы знаете, что статические блоки являются причиной связей с памятью? Вы много профилировали? Если вы точно не знаете причину, неплохо попытаться оптимизировать преждевременно. –
@ LionC см. Редактирование моего сообщения – poussma