Skip to content

Commit 93af17f

Browse files
andrii-ashomokenhorse
authored andcommitted
add Execution Engine
1 parent cca6a5a commit 93af17f

1 file changed

Lines changed: 41 additions & 3 deletions

File tree

jvm.md

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ JVM работает с примитивными значениями (целы
2626
которые реализуют интерфейсы соответственно.
2727

2828

29-
За что отвечает JVM:
29+
###### За что отвечает JVM:
3030
1. Загрузка, проверка (верификация) и исполнение байт кода;
3131
2. Предоставление среды выполнения для выполнения байт-кода;
3232
3. Управление памятью и очисткой мусора (Garbage collection);
@@ -91,6 +91,7 @@ JVM выделяет множество областей данных во вр
9191
Виртуальная машина Java может поддерживать много потоков исполнения одновременно. Каждый поток виртуальной машины Java имеет свой собственный регистр PC (programm counter).
9292
В любой момент каждый поток виртуальной машины Java выполняет код одного метода, а именно текущий метод для этого потока.
9393
Если этот метод не является native, регистр pc содержит адрес инструкции виртуальной машины Java, выполняемой в настоящее время.
94+
9495
Коротко говоря: для одного потока существует один PCR, который создается при запуске потока. PCR хранит адрес выполняемой сейчас инструкции JVM.
9596

9697
2.2. Java Virtual Machine Stacks
@@ -151,7 +152,7 @@ Frame перестает быть текущим, если его метод в
151152
Каждый frame содержит массив переменных, известных как его локальные переменные. Длина массива локальных переменных frame определяется во время компиляции
152153
и предоставляется в двоичном представлении класса или интерфейса вместе с кодом для метода, связанного с frame-ом.
153154
Еденичная локальная переменная может хранить значение типа: boolean, byte, char, short, int, float, reference, or returnAddress.
154-
Пара локальных переменных может хранить сначение типов: long или double.
155+
Пара локальных переменных может хранить значение типов: long или double.
155156

156157
Локальные переменные адресуются путем индексации. Индекс первой локальной переменной равен нулю.
157158

@@ -198,4 +199,41 @@ JVM использует локальные переменные для пере
198199

199200
Вызов метода завершается преждевременно, если при выполнении инструкции JVM в методе выдает исключение, и это исключение не обрабатывается в методе.
200201
Выполнение команды **athrow** также приводит к явному выбрасыванию исключения, и если исключение не перехватывается текущим методом,
201-
приводит к неожиданному завершению вызова метода. Вызов метода, который завершается внезапно, никогда не возвращает значение своему вызывающему.
202+
приводит к неожиданному завершению вызова метода. Вызов метода, который завершается внезапно, никогда не возвращает значение своему вызывающему.
203+
204+
###### 4. Execution Engine
205+
206+
Байт-код, назначенный **run-time data areas**, будет выполнен **execution engine**. Механизм выполнения считывает байт-код и выполняет его по частям.
207+
208+
4.1. Interpreter
209+
210+
Интерпретатор интерпретирует байт-код быстро, но выполняется медленно. Недостаток интерпретатора заключается в том, что когда один метод вызывается несколько раз, каждый раз требуется новая интерпретация.
211+
212+
4.2. JIT Compiler
213+
214+
JIT-компилятор устраняет недостатки интерпретатора. Механизм выполнения будет использовать помощь интерпретатора при преобразовании байт-кода,
215+
но когда он находит повторный код, он использует JIT-компилятор, который компилирует весь байт-код и изменяет его на собственный код.
216+
Этот нативный код будет использоваться непосредственно для повторных вызовов методов, которые улучшают производительность системы.
217+
218+
4.2.1. Генератор промежуточного кода (Intermediate Code Generator)
219+
220+
Производит промежуточный код.
221+
222+
4.2.2.Code Optimizer
223+
224+
Отвечает за оптимизацию промежуточного кода, сгенерированного выше.
225+
226+
4.2.3. Генератор целевого кода (Target Code Generator)
227+
228+
Отвечает за генерацию машинного кода или родной код.
229+
230+
4.2.4. Профилировщик (Profiler)
231+
232+
Специальный компонент, отвечающий за поиск горячих точек, то есть, вызывается ли метод несколько раз или нет.
233+
234+
4.3. Garbage Collector
235+
236+
Полезные ссылки с доп. информацией:
237+
- https://www.developer.com/java/data/understanding-the-jvm-architecture.html
238+
- https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
239+
- https://dzone.com/articles/understanding-jvm-internals

0 commit comments

Comments
 (0)