1
1
Fork 0

little correction

This commit is contained in:
andrey.ashomok 2020-03-06 11:19:28 +02:00 committed by Enchased Horse
parent 93af17f338
commit 095d90b962
1 changed files with 13 additions and 20 deletions

33
jvm.md
View File

@ -14,10 +14,6 @@ JVM работает с примитивными значениями (целы
Типы `boolean`, `byte`, `short` и `char` имеют расширенный знак (кроме `char` с нулевым расширением) и работают как 32-разрядные целые числа, так же как и типы `int`.
Меньшие типы имеют только несколько специфических для типа инструкций для загрузки, хранения и преобразования типов.
`boolean` значение работает как 8-битное `byte` значения, где 0 представляет значение **false**, а 1 - значение **true**.
В JVM есть сборщик мусора (garbage-collector) для хранения объектов и массивов. Код, константы и другие данные класса хранятся в «области метода».
Область метода является логически частью кучи, но реализации могут обрабатывать область метода отдельно от кучи и, например, могут не собирать мусор.
Каждый поток JVM также имеет свой собственный стек вызовов (для ясности называемый «стек виртуальных машин Java»), в котором хранятся `frames`.
Новый фрейм (`frame`) создается каждый раз, когда вызывается метод, и фрейм уничтожается при выходе из этого метода.
**Типы ссылок и значения**
@ -27,21 +23,18 @@ JVM работает с примитивными значениями (целы
###### За что отвечает JVM:
1. Загрузка, проверка (верификация) и исполнение байт кода;
1. Загрузка, проверка и исполнение байт кода;
2. Предоставление среды выполнения для выполнения байт-кода;
3. Управление памятью и очисткой мусора (Garbage collection);
![JVM Architecture]
(jvmarchitecture.png)
###### 1. Classloader (Загрузчик классов)
Java Classloader является частью JRE, которая динамичиски закгружает Java классы в JVM.
Обычно классы загружаются только по запросу. Система исполнения в Java не должна знать о файлах и файловых системах
благодаря загрузчику классов. Делегирование является важной концепцией, которую выполняет загрузчик. Загрузчик классов
благодаря загрузчику классов. **Делегирование является важной концепцией**, которую выполняет загрузчик. Загрузчик классов
отвечает за поиск библиотек, чтение их содержимого и загрузку классов, содержащихся в библиотеках.
Эта загрузка обычно выполняется «по требованию», поскольку она не происходит до тех пор, пока программа не вызовет класс.
Класс с именем может быть загружен только один раз данным загрузчиком классов.
Эта **загрузка** обычно выполняется **«по требованию»**, поскольку она не происходит до тех пор, пока программа не вызовет класс.
**Класс с именем может быть загружен только один раз данным загрузчиком классов.**
При запуске JVM, используются три загрузчика классов:
* Bootstrap class loader (Загрузчик класса Bootstrap)
@ -57,6 +50,14 @@ Java Classloader является частью JRE, которая динами
**Системный загрузчик** загружает код, найденный в `java.class.path`, который сопоставляется с переменной среды `CLASSPATH`.
Это реализуется классом `sun.misc.Launcher$AppClassLoader`.
Загрузчик классов выполняет три основных действия в строгом порядке:
* Загрузка: находит и импортирует двоичные данные для типа.
* Связывание: выполняет проверку, подготовку и (необязательно) разрешение.
- Проверка: обеспечивает правильность импортируемого типа.
- Подготовка: выделяет память для переменных класса и инициализация памяти значениями по умолчанию.
- Разрешение: преобразует символические ссылки из типа в прямые ссылки.
* Инициализация: вызывает код Java, который инициализирует переменные класса их правильными начальными значениями.
**Пользовательский загрузчик классов**
Загрузчик классов написан на Java. Поэтому возможно создать свой собственный загрузчик классов, не понимая тонких деталей JVM.
@ -73,14 +74,6 @@ Java Classloader является частью JRE, которая динами
* изменить способ загрузки байт-кода (например, можно использовать зашифрованный байт-код класса Java);
* модифицировать загруженный байт-код (например, для переплетения аспектов во время загрузки при использовании аспектно-ориентированного программирования);
Загрузчик классов выполняет три основных действия в строгом порядке:
* Загрузка: находит и импортирует двоичные данные для типа.
* Связывание: выполняет проверку, подготовку и (необязательно) разрешение.
- Проверка: обеспечивает правильность импортируемого типа.
- Подготовка: выделяет память для переменных класса и инициализация памяти значениями по умолчанию.
- Разрешение: преобразует символические ссылки из типа в прямые ссылки.
* Инициализация: вызывает код Java, который инициализирует переменные класса их правильными начальными значениями.
###### 2. Области данных времени выполнения (Run-Time Data Areas)
JVM выделяет множество областей данных во время выполнения, к-рые используются во время выполнения программы. Некоторые участки данных
@ -112,7 +105,7 @@ JVM не предполагает какого-либо конкретного
2.4. Method Area
JVM имеет область методов, которая является общей для всех потоков. Он хранит структуры для каждого класса, такие как пул констант, данные полей и методов,
JVM имеет область методов, которая является общей для всех потоков. Она хранит структуры для каждого класса, такие как пул констант, данные полей и методов,
а также код для методов и конструкторов, включая специальные методы, используемые при инициализации классов и экземпляров и инициализации интерфейса.
Хотя область метода является логически частью кучи, простые реализации могут не обрабатываться собиращиком мусора. Область метода может иметь
фиксированный размер или может быть расширена в соответствии с требованиями вычислений и может быть сокращена, если большая область метода становится ненужной.