JVM получает из программы Java, выполняемой ссылка на структуру

JVM получает из программы Java, выполняемой ссылка на структуру


1.java ява передний конец компилятор отвечает за компиляцию исходного кода в байт-код -> компилятор переднего конца

2.java виртуальная машина отвечает за загрузку байткод скомпилированного в интерьере -> этап загрузки операционной области и классов Java

Класс нагрузки: загружается, инициализация ссылки

Нагрузка : Класс нагрузка этап ответственность загрузчика классов для чтения , например двоичные байты потоков внутри JVM в соответствии с полным именем класса , метода и сохраняется в области памяти во время выполнения в зоне, а затем преобразовать его в что соответствует целевому типу java.lang.Class экземпляра объекта, объект будет класс в будущем в качестве метода доступа начальной зоны класса различных данных.
Ссылка : будет загружена в JVM в классе двоичного байта данных потока информации в рабочем состояние виртуальной машины Java , фаза соединения посредством аутентификации и синтаксический анализ подготовить конфигурацию трех этапов. Основной задачей этапа проверки является проверка типа ли данные спецификации JVM. Основной задачей подготовительного этапа является выделение пространства памяти для класса всех статических переменных, а также установить начальное значение. Синтаксический этапе все символические ссылки постоянный бассейн все превращается в прямую ссылку. Но спецификации JVM не предусматривают осуществление этапа разрешения в соответствии с определенным порядком, так что фаза разрешения не может выполнить только после инициализации.
Инициализация : виртуальная машина будет в классе все статические код или кодовые блоки , идентифицированные ключевые слова все выполняется снова.

загрузчика классов


Начальный загрузчик классов также стал загрузчик отвечает за загрузку всех типов «/ Lib JAVA_HOME» каталог
Все типы ExternalClassLoader, ответственные за загрузку «/ Библиотека / доб JAVA_HOME» каталог расширения
Все типы AppClassLoader, ответственные за загрузку следующего пути к классам

модель Родитель делегация

Родитель модель делегирования (Родитель Делегирование модель):

Класс нагрузки принимает родитель Доверьте механизм , который может лучше обеспечить безопасность платформы Java.
Эта модель требует добавлений топового загрузчика загрузчика класса Bootstrap, остальной загрузчик класса должны иметь свой собственный 父类加载器. загрузчик классов для детей и загрузчика классов родителя 不是以继承(Inheritance)的关系достигается, но 组合(Composition)关系мультиплексированные коды с родительским загрузчиком. Каждый класс имеет погрузчик свои собственное пространства имен (загрузчик и все загрузчики классов родительских нагруженные классов в том же пространстве имен, имя класса не отображается полным (включая пакет) то же самое два класса, в другом пространстве имен, может быть полным именем класса ( в том числе пакета) два из того же класса)

Родители могут делегировать модель процесса выглядит следующим образом:

1. Есть ли текущие ClassLoader первых запросов от его уже загруженного класса такого было загружен, если он уже загружены непосредственно обратно к исходному уже загруженному классу.

每个类加载器都有自己的加载缓存,当一个类被加载了以后就会放入缓存, 等下次加载的时候就可以直接返回了。 

2. Текущий ClassLoader не найден в кэш загружен класс, по заказу родительский загрузчик классов для загрузки, родительский загрузчик классов , используя ту же стратегию, сначала проверить свой кэш, а затем передать родительский класс родительского класса нагрузки, было к ClassLoader на Bootstrap.
3. когда весь класс погрузчик родителя не загружены, а затем загружается в текущем загрузчике класса, и помещенном в своем кэше, поэтому в следующий раз есть запрос возврат нагрузки непосредственно.

Преимущества использования этой модели для организации отношений между загрузчиком класса:
главным образом , 安全性пользователями избежать написанного класса Java динамически заменить некоторые базовые классы, такие как строки, но и избежать 重复加载, потому что JVM , чтобы различать между различными классами, а не только Он только что загрузили два различных класса на основе имени класса, тот же самый файл класса отличается ClassLoader, если взаимного преобразования, то выбросит java.lang.ClassCaseException.

Пользовательский загрузчик классов

Только нужно , чтобы наследовать абстрактный класс ClassLoader и переписать findClass () метод может быть. Преобразование читать входящий двоичный массив в экземпляр класса класса , используемого в в defineClass метода ().

3. И, наконец интерпретированы / сост в машинные инструкции, выполняемых на соответствующей платформе -> Jvm исполнения двигателя и сбора мусора GC

 Java байт - код выполняется двумя способами:
  1. в времени компиляции образом: первый интерпретатор байт - кода компилятор в машинный код, а затем выполняет машинный код. 
  2. Режим интерпретирующего исполнения: интерпретатором интерпретирует и выполняет каждый фрагмент кода для выполнения всех операций программ байткода Java. 

JDK и OpenJDK HotSpot VM в умолчанию поставляется с виртуальной машиной. В HotSpot VM, в-времени компилятор и интерпретатор сосуществовать. Это происходит потому , что , когда виртуальная машина работает на интерпретатор может делать свою работу первым, не дожидаясь компилятора скомпилировать все в комплекте перед выполнением, поэтому может сэкономить много ненужного времени компиляции. За и время выполнения программы, компилятор функции постепенно, горячая функция обнаружения в соответствии со значением (часто называемые методы) байт кода , скомпилированного в родные машинные команды в обмен на повышение эффективности выполнения программы.



Опубликовано 159 оригинальных статей · вона похвала 75 · просмотров 190 000 +

рекомендация

отblog.csdn.net/xuehuagongzi000/article/details/70054576