--- aliases: tags: - maturity/🌱 date: "[[2023-11-06]]" --- ## Тезисы - 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]] ### Дополнительные материалы - ### Дочерние заметки - [[ClassLoader]]