ClassLoader в Java — это абстрактный класс (java.lang.ClassLoader
), отвечающий за загрузку классов во время выполнения программы. Он находит байт-код класса (.class
файл), преобразует его в объект Class
и сохраняет его в памяти JVM.
Основные функции ClassLoader:
- Загрузка: Чтение байт-кода класса из различных источников (файл, сеть и т.д.).
- Проверка: Выполнение проверок безопасности на загружаемом байт-коде.
- Связывание (Linking):
- Проверка (Verification): Проверка корректности байт-кода.
- Подготовка (Preparation): Инициализация статических переменных класса значениями по умолчанию.
- Разрешение (Resolution): Загрузка классов, на которые ссылается текущий класс, при необходимости (динамически).
- Инициализация (Initialization): Выполнение статических блоков и присвоений статическим переменным.
Иерархия ClassLoader:
Java имеет иерархию ClassLoader-ов с делегированием:
- Bootstrap ClassLoader: Загружает основные классы JDK (rt.jar). Написан на C++ и является частью JVM.
- Extension ClassLoader: Загружает классы из директории
jre/lib/ext
. Является дочерним по отношению к Bootstrap ClassLoader.
- System (Application) ClassLoader: Загружает классы из директории приложения
ClassLoader в Java — это абстрактный класс (java.lang.ClassLoader
), отвечающий за загрузку классов во время выполнения программы. Он находит байт-код класса (.class
файл), преобразует его в объект Class
и сохраняет его в памяти JVM.
Основные функции ClassLoader:
- Загрузка: Чтение байт-кода класса из различных источников (файл, сеть и т.д.).
- Проверка: Выполнение проверок безопасности на загружаемом байт-коде.
- Связывание (Linking):
- Проверка (Verification): Проверка корректности байт-кода.
- Подготовка (Preparation): Инициализация статических переменных класса значениями по умолчанию.
- Разрешение (Resolution): Загрузка классов, на которые ссылается текущий класс, при необходимости (динамически).
- Инициализация (Initialization): Выполнение статических блоков и присвоений статическим переменным.
Иерархия ClassLoader:
Java имеет иерархию ClassLoader-ов с делегированием:
- Bootstrap ClassLoader: Загружает основные классы JDK (rt.jar). Написан на C++ и является частью JVM.
- Extension ClassLoader: Загружает классы из директории
jre/lib/ext
. Является дочерним по отношению к Bootstrap ClassLoader.
- System (Application) ClassLoader: Загружает классы из директории приложения