From 93af17f338facc35cac8096ffc8449a349a3dc48 Mon Sep 17 00:00:00 2001 From: scorpioa Date: Thu, 27 Feb 2020 20:02:54 +0200 Subject: [PATCH] add Execution Engine --- jvm.md | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/jvm.md b/jvm.md index 57868df..be79b7e 100644 --- a/jvm.md +++ b/jvm.md @@ -26,7 +26,7 @@ JVM работает с примитивными значениями (целы которые реализуют интерфейсы соответственно. -За что отвечает JVM: +###### За что отвечает JVM: 1. Загрузка, проверка (верификация) и исполнение байт кода; 2. Предоставление среды выполнения для выполнения байт-кода; 3. Управление памятью и очисткой мусора (Garbage collection); @@ -91,6 +91,7 @@ JVM выделяет множество областей данных во вр Виртуальная машина Java может поддерживать много потоков исполнения одновременно. Каждый поток виртуальной машины Java имеет свой собственный регистр PC (programm counter). В любой момент каждый поток виртуальной машины Java выполняет код одного метода, а именно текущий метод для этого потока. Если этот метод не является native, регистр pc содержит адрес инструкции виртуальной машины Java, выполняемой в настоящее время. + Коротко говоря: для одного потока существует один PCR, который создается при запуске потока. PCR хранит адрес выполняемой сейчас инструкции JVM. 2.2. Java Virtual Machine Stacks @@ -151,7 +152,7 @@ Frame перестает быть текущим, если его метод в Каждый frame содержит массив переменных, известных как его локальные переменные. Длина массива локальных переменных frame определяется во время компиляции и предоставляется в двоичном представлении класса или интерфейса вместе с кодом для метода, связанного с frame-ом. Еденичная локальная переменная может хранить значение типа: boolean, byte, char, short, int, float, reference, or returnAddress. -Пара локальных переменных может хранить сначение типов: long или double. +Пара локальных переменных может хранить значение типов: long или double. Локальные переменные адресуются путем индексации. Индекс первой локальной переменной равен нулю. @@ -198,4 +199,41 @@ JVM использует локальные переменные для пере Вызов метода завершается преждевременно, если при выполнении инструкции JVM в методе выдает исключение, и это исключение не обрабатывается в методе. Выполнение команды **athrow** также приводит к явному выбрасыванию исключения, и если исключение не перехватывается текущим методом, -приводит к неожиданному завершению вызова метода. Вызов метода, который завершается внезапно, никогда не возвращает значение своему вызывающему. \ No newline at end of file +приводит к неожиданному завершению вызова метода. Вызов метода, который завершается внезапно, никогда не возвращает значение своему вызывающему. + +###### 4. Execution Engine + +Байт-код, назначенный **run-time data areas**, будет выполнен **execution engine**. Механизм выполнения считывает байт-код и выполняет его по частям. + +4.1. Interpreter + +Интерпретатор интерпретирует байт-код быстро, но выполняется медленно. Недостаток интерпретатора заключается в том, что когда один метод вызывается несколько раз, каждый раз требуется новая интерпретация. + +4.2. JIT Compiler + +JIT-компилятор устраняет недостатки интерпретатора. Механизм выполнения будет использовать помощь интерпретатора при преобразовании байт-кода, +но когда он находит повторный код, он использует JIT-компилятор, который компилирует весь байт-код и изменяет его на собственный код. +Этот нативный код будет использоваться непосредственно для повторных вызовов методов, которые улучшают производительность системы. + +4.2.1. Генератор промежуточного кода (Intermediate Code Generator) + +Производит промежуточный код. + +4.2.2.Code Optimizer + +Отвечает за оптимизацию промежуточного кода, сгенерированного выше. + +4.2.3. Генератор целевого кода (Target Code Generator) + +Отвечает за генерацию машинного кода или родной код. + +4.2.4. Профилировщик (Profiler) + +Специальный компонент, отвечающий за поиск горячих точек, то есть, вызывается ли метод несколько раз или нет. + + 4.3. Garbage Collector + +Полезные ссылки с доп. информацией: +- https://www.developer.com/java/data/understanding-the-jvm-architecture.html +- https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html +- https://dzone.com/articles/understanding-jvm-internals \ No newline at end of file