little correction
This commit is contained in:
parent
93af17f338
commit
095d90b962
33
jvm.md
33
jvm.md
|
@ -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 имеет область методов, которая является общей для всех потоков. Она хранит структуры для каждого класса, такие как пул констант, данные полей и методов,
|
||||
а также код для методов и конструкторов, включая специальные методы, используемые при инициализации классов и экземпляров и инициализации интерфейса.
|
||||
Хотя область метода является логически частью кучи, простые реализации могут не обрабатываться собиращиком мусора. Область метода может иметь
|
||||
фиксированный размер или может быть расширена в соответствии с требованиями вычислений и может быть сокращена, если большая область метода становится ненужной.
|
||||
|
|
Loading…
Reference in New Issue