- 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)**: На этом этапе выполняются статические инициализаторы классов и инициализируются статические переменные. Это завершающий этап, который делает класс готовым к использованию.