Как узнать, была ли выполнена инициализация статического блока?

Я пытаюсь избавиться от некоторых утечек памяти. Я хотел бы сбросить все статические переменные всех классов (не только моих) из загрузчика классов. E сть classes атрибут, который перечисляет все классы, известные ClassLoader.

Поэтому я просто хочу зациклить его и с помощью отражения установить статические переменные в нуль.

Проблема в том, что все эти классы не обязательно были инициализированы (инициализация статического блока не выполнялась). Поскольку целью является сброс значений и выгрузка классов, нет смысла инициализировать эти классы. Более того, когда я сбрасываю класс ROOT, который используется в SBI другого класса CHILD, запуск SBI в CHILD может привести к неожиданному поведению...

Таким образом, вопрос: есть ли способ узнать, был ли SBI запущен JVM или нет.


Замечания:

любому, кто предлагает использовать findLoadedClass класса ClassLoader, в спецификации есть это важное предложение: * В этом посте есть важное примечание: "загружен" не означает "инициализирован". инициализация происходит только в точные моменты, определенные JLS3 $12.4.1 *

1 ответ

static Блок был инициализирован, если класс был загружен в JVM.

Загружен ли класс в JVM, который вы можете обнаружить с помощью ClassLoader

Другие вопросы по тегам