JVM получает из программы Java, выполняемой ссылка на структуру
1.java ява передний конец компилятор отвечает за компиляцию исходного кода в байт-код -> компилятор переднего конца
2.java виртуальная машина отвечает за загрузку байткод скомпилированного в интерьере -> этап загрузки операционной области и классов Java
Класс нагрузки: загружается, инициализация ссылки
загрузчика классов
модель Родитель делегация
Родитель модель делегирования (Родитель Делегирование модель):
Класс нагрузки принимает родитель Доверьте механизм , который может лучше обеспечить безопасность платформы Java.
Эта модель требует добавлений топового загрузчика загрузчика класса Bootstrap, остальной загрузчик класса должны иметь свой собственный 父类加载器
. загрузчик классов для детей и загрузчика классов родителя 不是以继承(Inheritance)的关系
достигается, но 组合(Composition)关系
мультиплексированные коды с родительским загрузчиком. Каждый класс имеет погрузчик свои собственное пространства имен (загрузчик и все загрузчики классов родительских нагруженные классов в том же пространстве имен, имя класса не отображается полным (включая пакет) то же самое два класса, в другом пространстве имен, может быть полным именем класса ( в том числе пакета) два из того же класса)
Родители могут делегировать модель процесса выглядит следующим образом:
1. Есть ли текущие ClassLoader первых запросов от его уже загруженного класса такого было загружен, если он уже загружены непосредственно обратно к исходному уже загруженному классу.
每个类加载器都有自己的加载缓存,当一个类被加载了以后就会放入缓存, 等下次加载的时候就可以直接返回了。
2. Текущий ClassLoader не найден в кэш загружен класс, по заказу родительский загрузчик классов для загрузки, родительский загрузчик классов , используя ту же стратегию, сначала проверить свой кэш, а затем передать родительский класс родительского класса нагрузки, было к ClassLoader на Bootstrap.
3. когда весь класс погрузчик родителя не загружены, а затем загружается в текущем загрузчике класса, и помещенном в своем кэше, поэтому в следующий раз есть запрос возврат нагрузки непосредственно.
Преимущества использования этой модели для организации отношений между загрузчиком класса:
главным образом , 安全性
пользователями избежать написанного класса Java динамически заменить некоторые базовые классы, такие как строки, но и избежать 重复加载
, потому что JVM , чтобы различать между различными классами, а не только Он только что загрузили два различных класса на основе имени класса, тот же самый файл класса отличается ClassLoader, если взаимного преобразования, то выбросит java.lang.ClassCaseException.
Пользовательский загрузчик классов
3. И, наконец интерпретированы / сост в машинные инструкции, выполняемых на соответствующей платформе -> Jvm исполнения двигателя и сбора мусора GC
Java байт - код выполняется двумя способами:
1. в времени компиляции образом: первый интерпретатор байт - кода компилятор в машинный код, а затем выполняет машинный код.
2. Режим интерпретирующего исполнения: интерпретатором интерпретирует и выполняет каждый фрагмент кода для выполнения всех операций программ байткода Java.
JDK и OpenJDK HotSpot VM в умолчанию поставляется с виртуальной машиной. В HotSpot VM, в-времени компилятор и интерпретатор сосуществовать. Это происходит потому , что , когда виртуальная машина работает на интерпретатор может делать свою работу первым, не дожидаясь компилятора скомпилировать все в комплекте перед выполнением, поэтому может сэкономить много ненужного времени компиляции. За и время выполнения программы, компилятор функции постепенно, горячая функция обнаружения в соответствии со значением (часто называемые методы) байт кода , скомпилированного в родные машинные команды в обмен на повышение эффективности выполнения программы.