From 095d90b96276eda98166c8f103ce00d5f866ee9b Mon Sep 17 00:00:00 2001 From: "andrey.ashomok" Date: Fri, 6 Mar 2020 11:19:28 +0200 Subject: [PATCH] little correction --- jvm.md | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/jvm.md b/jvm.md index be79b7e..aee8a59 100644 --- a/jvm.md +++ b/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 имеет область методов, которая является общей для всех потоков. Она хранит структуры для каждого класса, такие как пул констант, данные полей и методов, а также код для методов и конструкторов, включая специальные методы, используемые при инициализации классов и экземпляров и инициализации интерфейса. Хотя область метода является логически частью кучи, простые реализации могут не обрабатываться собиращиком мусора. Область метода может иметь фиксированный размер или может быть расширена в соответствии с требованиями вычислений и может быть сокращена, если большая область метода становится ненужной.