add Execution Engine
This commit is contained in:
parent
cca6a5a73a
commit
93af17f338
44
jvm.md
44
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** также приводит к явному выбрасыванию исключения, и если исключение не перехватывается текущим методом,
|
||||
приводит к неожиданному завершению вызова метода. Вызов метода, который завершается внезапно, никогда не возвращает значение своему вызывающему.
|
||||
приводит к неожиданному завершению вызова метода. Вызов метода, который завершается внезапно, никогда не возвращает значение своему вызывающему.
|
||||
|
||||
###### 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
|
Loading…
Reference in New Issue