Я хотел понять, что объекты становятся недоступными. Может ли это быть применимо и к загрузчикам классов и классам?
Да, загрузчики классов и классы могут стать недоступными при определенных обстоятельствах.
Это относится только к загрузчикам классов, которые были созданы динамически, и классам, которые они загружают. Начальный bootstrap и загрузчик классов приложений доступны постоянно, и любые классы, которые они загружают (define
), будут доступны постоянно.
Существует множество путей достижимости, включая
- из класса в родительский загрузчик классов
- из загрузчика классов в каждый загруженный класс
- из класса в каждый класс, который зависит от
- от каждого объекта до его класса и
- от каждого вызова метода в стеке потока до класса, который определяет метод.
Короче говоря, если приложение может найти или использовать (загруженный) класс или загрузчик классов, это достижимо. В противном случае он нам недоступен.
Если да, то как.
Избавившись от всех путей, которые делают загрузчик классов и его классы достижимыми. Как и в случае с обычным объектом.
(За исключением того, что его труднее достичь, поскольку многие пути достижимости находятся за кулисами, а код приложения не может их напрямую сломать. Отсюда и проблема в приложениях, которые широко используют динамической c загрузки классов, динамических c прокси и т. п. может страдать от утечек метапространства.)