JVM динамически управляет процессом загрузки, связывания и инициализации классов и интерфейсов. В процессе загрузки JVM находит двоичное представление класса и создает его.
В процессе связывания загруженные классы объединяются в состояние времени выполнения JVM, чтобы их можно было выполнить на этапе инициализации . JVM в основном использует таблицу символов, хранящуюся в постоянном пуле времени выполнения, для процесса связывания. Инициализация состоит из фактического выполнения связанных классов .
Типы погрузчиков
Загрузчик классов BootStrap находится на вершине иерархии загрузчиков классов. Он загружает стандартные классы JDK в каталог lib JRE.
Загрузчик класса Extension находится в середине иерархии загрузчика классов и является непосредственным потомком загрузчика классов начальной загрузки и загружает классы в каталог lib \ ext JRE.
Загрузчик классов приложений находится в нижней части иерархии загрузчиков классов и является непосредственным потомком загрузчика классов приложений. Он загружает файлы jar и классы, указанные в переменной CLVSPATH ENV .
соединение
Процесс связывания состоит из следующих трех шагов —
Проверка — это выполняется с помощью верификатора байт-кода, чтобы убедиться, что сгенерированные файлы .class (байт-код) действительны. Если нет, выдается ошибка, и процесс компоновки останавливается.
Подготовка — память выделяется для всех статических переменных класса, и они инициализируются со значениями по умолчанию.
Решение. Все символические ссылки в памяти заменяются исходными ссылками. Для этого используется таблица символов в постоянной памяти времени выполнения области метода класса.
инициализация
Это последний этап процесса загрузки классов. Статическим переменным присваиваются исходные значения и выполняются статические блоки.