You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: jvm.md
+41-3Lines changed: 41 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26,7 +26,7 @@ JVM работает с примитивными значениями (целы
26
26
которые реализуют интерфейсы соответственно.
27
27
28
28
29
-
За что отвечает JVM:
29
+
###### За что отвечает JVM:
30
30
1. Загрузка, проверка (верификация) и исполнение байт кода;
31
31
2. Предоставление среды выполнения для выполнения байт-кода;
32
32
3. Управление памятью и очисткой мусора (Garbage collection);
@@ -91,6 +91,7 @@ JVM выделяет множество областей данных во вр
91
91
Виртуальная машина Java может поддерживать много потоков исполнения одновременно. Каждый поток виртуальной машины Java имеет свой собственный регистр PC (programm counter).
92
92
В любой момент каждый поток виртуальной машины Java выполняет код одного метода, а именно текущий метод для этого потока.
93
93
Если этот метод не является native, регистр pc содержит адрес инструкции виртуальной машины Java, выполняемой в настоящее время.
94
+
94
95
Коротко говоря: для одного потока существует один PCR, который создается при запуске потока. PCR хранит адрес выполняемой сейчас инструкции JVM.
95
96
96
97
2.2. Java Virtual Machine Stacks
@@ -151,7 +152,7 @@ Frame перестает быть текущим, если его метод в
151
152
Каждый frame содержит массив переменных, известных как его локальные переменные. Длина массива локальных переменных frame определяется во время компиляции
152
153
и предоставляется в двоичном представлении класса или интерфейса вместе с кодом для метода, связанного с frame-ом.
153
154
Еденичная локальная переменная может хранить значение типа: boolean, byte, char, short, int, float, reference, or returnAddress.
154
-
Пара локальных переменных может хранить сначение типов: long или double.
155
+
Пара локальных переменных может хранить значение типов: long или double.
155
156
156
157
Локальные переменные адресуются путем индексации. Индекс первой локальной переменной равен нулю.
157
158
@@ -198,4 +199,41 @@ JVM использует локальные переменные для пере
198
199
199
200
Вызов метода завершается преждевременно, если при выполнении инструкции JVM в методе выдает исключение, и это исключение не обрабатывается в методе.
200
201
Выполнение команды **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
+
Этот нативный код будет использоваться непосредственно для повторных вызовов методов, которые улучшают производительность системы.
0 commit comments