Skip to content

Commit 095d90b

Browse files
andrii-ashomokenhorse
authored andcommitted
little correction
1 parent 93af17f commit 095d90b

1 file changed

Lines changed: 13 additions & 20 deletions

File tree

jvm.md

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ JVM работает с примитивными значениями (целы
1414
Типы `boolean`, `byte`, `short` и `char` имеют расширенный знак (кроме `char` с нулевым расширением) и работают как 32-разрядные целые числа, так же как и типы `int`.
1515
Меньшие типы имеют только несколько специфических для типа инструкций для загрузки, хранения и преобразования типов.
1616
`boolean` значение работает как 8-битное `byte` значения, где 0 представляет значение **false**, а 1 - значение **true**.
17-
В JVM есть сборщик мусора (garbage-collector) для хранения объектов и массивов. Код, константы и другие данные класса хранятся в «области метода».
18-
Область метода является логически частью кучи, но реализации могут обрабатывать область метода отдельно от кучи и, например, могут не собирать мусор.
19-
Каждый поток JVM также имеет свой собственный стек вызовов (для ясности называемый «стек виртуальных машин Java»), в котором хранятся `frames`.
20-
Новый фрейм (`frame`) создается каждый раз, когда вызывается метод, и фрейм уничтожается при выходе из этого метода.
2117

2218
**Типы ссылок и значения**
2319

@@ -27,21 +23,18 @@ JVM работает с примитивными значениями (целы
2723

2824

2925
###### За что отвечает JVM:
30-
1. Загрузка, проверка (верификация) и исполнение байт кода;
26+
1. Загрузка, проверка и исполнение байт кода;
3127
2. Предоставление среды выполнения для выполнения байт-кода;
3228
3. Управление памятью и очисткой мусора (Garbage collection);
3329

34-
![JVM Architecture]
35-
(jvmarchitecture.png)
36-
3730
###### 1. Classloader (Загрузчик классов)
3831

3932
Java Classloader является частью JRE, которая динамичиски закгружает Java классы в JVM.
4033
Обычно классы загружаются только по запросу. Система исполнения в Java не должна знать о файлах и файловых системах
41-
благодаря загрузчику классов. Делегирование является важной концепцией, которую выполняет загрузчик. Загрузчик классов
34+
благодаря загрузчику классов. **Делегирование является важной концепцией**, которую выполняет загрузчик. Загрузчик классов
4235
отвечает за поиск библиотек, чтение их содержимого и загрузку классов, содержащихся в библиотеках.
43-
Эта загрузка обычно выполняется «по требованию», поскольку она не происходит до тех пор, пока программа не вызовет класс.
44-
Класс с именем может быть загружен только один раз данным загрузчиком классов.
36+
Эта **загрузка** обычно выполняется **«по требованию»**, поскольку она не происходит до тех пор, пока программа не вызовет класс.
37+
**Класс с именем может быть загружен только один раз данным загрузчиком классов.**
4538

4639
При запуске JVM, используются три загрузчика классов:
4740
* Bootstrap class loader (Загрузчик класса Bootstrap)
@@ -57,6 +50,14 @@ Java Classloader является частью JRE, которая динами
5750
**Системный загрузчик** загружает код, найденный в `java.class.path`, который сопоставляется с переменной среды `CLASSPATH`.
5851
Это реализуется классом `sun.misc.Launcher$AppClassLoader`.
5952

53+
Загрузчик классов выполняет три основных действия в строгом порядке:
54+
* Загрузка: находит и импортирует двоичные данные для типа.
55+
* Связывание: выполняет проверку, подготовку и (необязательно) разрешение.
56+
- Проверка: обеспечивает правильность импортируемого типа.
57+
- Подготовка: выделяет память для переменных класса и инициализация памяти значениями по умолчанию.
58+
- Разрешение: преобразует символические ссылки из типа в прямые ссылки.
59+
* Инициализация: вызывает код Java, который инициализирует переменные класса их правильными начальными значениями.
60+
6061
**Пользовательский загрузчик классов**
6162

6263
Загрузчик классов написан на Java. Поэтому возможно создать свой собственный загрузчик классов, не понимая тонких деталей JVM.
@@ -73,14 +74,6 @@ Java Classloader является частью JRE, которая динами
7374
* изменить способ загрузки байт-кода (например, можно использовать зашифрованный байт-код класса Java);
7475
* модифицировать загруженный байт-код (например, для переплетения аспектов во время загрузки при использовании аспектно-ориентированного программирования);
7576

76-
Загрузчик классов выполняет три основных действия в строгом порядке:
77-
* Загрузка: находит и импортирует двоичные данные для типа.
78-
* Связывание: выполняет проверку, подготовку и (необязательно) разрешение.
79-
- Проверка: обеспечивает правильность импортируемого типа.
80-
- Подготовка: выделяет память для переменных класса и инициализация памяти значениями по умолчанию.
81-
- Разрешение: преобразует символические ссылки из типа в прямые ссылки.
82-
* Инициализация: вызывает код Java, который инициализирует переменные класса их правильными начальными значениями.
83-
8477
###### 2. Области данных времени выполнения (Run-Time Data Areas)
8578

8679
JVM выделяет множество областей данных во время выполнения, к-рые используются во время выполнения программы. Некоторые участки данных
@@ -112,7 +105,7 @@ JVM не предполагает какого-либо конкретного
112105

113106
2.4. Method Area
114107

115-
JVM имеет область методов, которая является общей для всех потоков. Он хранит структуры для каждого класса, такие как пул констант, данные полей и методов,
108+
JVM имеет область методов, которая является общей для всех потоков. Она хранит структуры для каждого класса, такие как пул констант, данные полей и методов,
116109
а также код для методов и конструкторов, включая специальные методы, используемые при инициализации классов и экземпляров и инициализации интерфейса.
117110
Хотя область метода является логически частью кучи, простые реализации могут не обрабатываться собиращиком мусора. Область метода может иметь
118111
фиксированный размер или может быть расширена в соответствии с требованиями вычислений и может быть сокращена, если большая область метода становится ненужной.

0 commit comments

Comments
 (0)