Виртуальная машина Java - загрузчик классов
JVM динамически управляет процессом загрузки, связывания и инициализации классов и интерфейсов. В процессе загрузкиJVM finds the binary representation of a class and creates it.
В процессе связывания loaded classes are combined into the run-time state of the JVM so that they can be executed during the initialization phase. JVM в основном использует таблицу символов, хранящуюся в пуле констант времени выполнения, для процесса связывания. Инициализация состоит из собственноexecuting the linked classes.
Типы погрузчиков
В BootStrapзагрузчик классов находится на вершине иерархии загрузчиков классов. Он загружает стандартные классы JDK в каталог JRE lib .
В Extension Загрузчик классов находится в середине иерархии загрузчиков классов и является непосредственным потомком загрузчика классов начальной загрузки и загружает классы в каталог lib \ ext JRE.
В ApplicationЗагрузчик классов находится в нижней части иерархии загрузчиков классов и является непосредственным потомком загрузчика классов приложения. Он загружает jar-файлы и классы, указанные вCLASSPATH ENV переменная.
Связывание
Процесс связывания состоит из следующих трех шагов -
Verification- Это выполняется верификатором байт-кода, чтобы убедиться, что сгенерированные файлы .class (байт-код) действительны. В противном случае выдается ошибка и процесс связывания останавливается.
Preparation - Память выделяется для всех статических переменных класса, и они инициализируются значениями по умолчанию.
Resolution- Все символьные ссылки на память заменяются исходными ссылками. Для этого используется таблица символов в постоянной памяти времени выполнения области методов класса.
Инициализация
Это заключительный этап процесса загрузки классов. Статическим переменным присваиваются исходные значения, и выполняются статические блоки.