Загрузка класса
Загрузка класса относится к чтению двоичных данных из файла класса .class в память, помещая их в область метода области данных времени выполнения, а затем создание объекта Java.lang.class в области кучи, чтобы использовать инкапсуляции структуры данных класса в области метода.
Как загрузить файлы .class:
1. загрузите прямо из локальной системы
2. Загрузите файл .class через Интернет
3. Загрузите.
4. Извлечение. Класс файлов из проприетарной базы данных
5. Динамически компилировать исходные файлы Java в файлы .class
Окончательным продуктом загрузки класса является объект класса, расположенный в области кучи.
Объект класса инкапсулирует структуру данных класса в области метода и предоставляет программистам Java интерфейс для доступа к структуре данных в области метода.
Есть два типа загрузчиков класса:
1. Погрузчик, который поставляется с Java Virtualizer
Загрузчик корневого класса (начальная загрузка)
Загрузчик класса расширения (расширение)
Загрузчик системного класса или загрузчик приложения (система)
Последние два погрузчика реализованы в Java, а загрузчик класса корневого класса записан в C ++, и программисты не могут получить этот класс в коде Java.
2. Пользовательский загрузчик класса, определяемый пользователем
Подкласс java.lang.classloader
Пользователи могут настроить метод загрузки класса
Загрузчику класса не нужно ждать, пока класс сначала не будет активно использован перед загрузкой.
Спецификация JVM позволяет загрузке класса предварительно загружать класс, когда они ожидают, что он будет использоваться. Сообщите об ошибке (LinkageError). Если этот класс не был активно использован программой, загрузчик класса не сообщит об ошибке.
Классный механизм удаления
Жизненный цикл класса.
Когда объект класса, представляющий класс выборки, больше не упоминается, то есть на него нельзя трогать, объект класса положит конец жизненному циклу, и данные класса выборки в области метода также будут разгружены, что заканчивает срок службы Цикл образца класса.
Видно, что когда класс заканчивает свой жизненный цикл, зависит от того, когда объект класса, представляющий его, заканчивает его жизненный цикл.
Справочные отношения загрузчика и объекты класса:
Во внутренней реализации классового погрузчика коллекция Java используется для хранения ссылок на загруженный класс.
С другой стороны, объект класса всегда ссылается на загрузчик класса. Вызовите метод getClassLoader () объекта класса, чтобы получить загрузчик класса.
Можно видеть, что между экземпляром класса и загрузчиком существует двунаправленная связь.
Объект класса, объект класса, объект экземпляра класса:
Экземпляр класса всегда относится к объекту класса, представляющему класс.
Метод getClass () определяется в классе объекта, который возвращает ссылку на объект класса, представляющий класс, к которому принадлежит объект.
Кроме того, все классы Java имеют статический класс свойств, который ссылается на объект класса, представляющий этот класс.
Удаление класса
Классы, загруженные загрузчиком класса, который поставляется с виртуальной машиной Java, никогда не будут удалены в течение жизненного цикла виртуальной машины.
Как упоминалось ранее, загрузчики классов, которые поставляются с виртуальными машинами Java, включают погрузчики класса корневых классов, погрузчики класса расширения и загрузки системы.
Сама виртуальная машина Java всегда ссылается на эти загрузчики классов, и эти загрузки классов всегда относятся к объектам класса класса, которые они загружают, поэтому эти объекты класса всегда доступны.
Классы, загруженные пользовательскими загрузчиками класса, могут быть разгружены.
Конкретные примеры
Переменная Loader1 и переменная OBJ косвенно применяют объект класса, представляющий класс выборки, в то время как переменная objclass напрямую ссылается на него.
Если три эталонные переменные на левой стороне вышеуказанной картинки устанавливаются на NULL во время операции программы, объект выборки заканчивает свой жизненный цикл, объект MyClassLoader заканчивает свой жизненный цикл, а объект класса, представляющий класс выборки, также заканчивает свою жизнь Цикл.
Когда это необходимо снова, он проверит, существует ли класс класса выборки. будет сгенерирована в области кучи виртуальной машины Java.