digital-garden/dev/java/Class Loader Subsystem.md

40 lines
4.5 KiB
Markdown
Raw Normal View History

2024-11-04 19:12:20 +03:00
---
aliases:
tags:
- maturity/🌱
2024-11-12 00:47:06 +03:00
date: 2023-11-06
2024-11-04 19:12:20 +03:00
---
## Тезисы
- Class Loader Subsystem — часть [[Java Virtual Machine|JVM]], ответственная за загрузку, связывание и инициализацию классов.
- Хранит информацию о загруженных классах и загружает скомпилированные файлы классов (Class Files) в память.
- [[gc/Garbage Collector|Сборка мусора]] здесь не производится, что может привести к `OutOfMemoryException` при создании большого количества классов "на лету".
- Основные этапы работы: загрузка, проверка, связывание и инициализация классов.
- Включает иерархию [[ClassLoader|Classloader]], что позволяет гибко управлять загрузкой и безопасностью классов.
***
Class Loader Subsystem — это часть [[Java Virtual Machine|JVM]], которая отвечает за управление процессом загрузки, связывания и инициализации классов. Здесь хранится информация о классах, которые были загружены в память. Он берет скомпилированные файлы классов (Class Files) и загружает их для использования в программе.
Важно отметить, что [[gc/Garbage Collector|сборка мусора]] в этой части JVM не производится, поэтому при создании большого количества классов "на лету" существует риск получения ошибки `OutOfMemoryException`.
**Основные этапы работы Class Loader Subsystem**
1. **Загрузка (Loading)**: На этом этапе Class Loader Subsystem находит и загружает файлы классов в память. Используются различные типы [[ClassLoader|Classloader]] (Bootstrap, Extension, Application), которые обеспечивают доступ к необходимым классам в зависимости от их принадлежности.
2. **Проверка (Verification)**: После загрузки классов выполняется проверка их корректности. Это необходимо для предотвращения потенциально опасного кода, который может нарушить работу JVM или привести к сбоям. Проверка включает анализ структуры байт-кода, соответствие стандартам Java и другие меры безопасности.
3. **Связывание (Linking)**: Этот этап включает несколько подпроцессов:
- **Подготовка (Preparation)**: Создаются статические поля классов и выделяется память под них, но не происходит их инициализация.
- **Разрешение (Resolution)**: Разрешаются ссылки на другие классы и их методы, чтобы JVM могла корректно работать с зависимостями между классами.
4. **Инициализация (Initialization)**: На этом этапе выполняются статические инициализаторы классов и инициализируются статические переменные. Это завершающий этап, который делает класс готовым к использованию.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
**Родитель**:: [[Архитектура JVM]]
**Источник**::
**Автор**::
**Создана**:: [[2023-11-06]]
### Дополнительные материалы
-
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
<!-- SerializedQuery: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
- [[ClassLoader]]
<!-- SerializedQuery END -->