[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-jvm-chto-takoe-classloader-i-kak-on-rabotaet":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":17,"progress":18,"seo":19},1208,"chto-takoe-classloader-i-kak-on-rabotaet",38,"jvm","JVM","⚙️","Что такое Classloader и как он работает","Classloader (загрузчик классов) — это компонент JRE, который динамически загружает Java-классы в JVM по требованию. Класс с данным именем может быть загружен только один раз конкретным загрузчиком.\n\n> Аналогия из жизни: загрузчик классов работает как библиотечная система. Когда программе нужен класс, она обращается к загрузчику. Тот сначала спрашивает у вышестоящего загрузчика (как запрос в центральную библиотеку), и только если тот не нашёл — ищет сам. Это принцип делегирования.\n\n### Иерархия загрузчиков\n\nПри запуске JVM используются три загрузчика классов:\n\n| Загрузчик | Что загружает | Расположение |\n|---|---|---|\n| Bootstrap class loader | Ядро Java (java.lang, java.util) | `\u003CJAVA_HOME>\u002Fjre\u002Flib` |\n| Platform class loader (Extensions до Java 9) | Модули платформы (не из java.base) | В Java 9+ — модули JPMS |\n| System (Application) class loader | Классы приложения | `CLASSPATH` (java.class.path) |\n\nНачиная с Java 9, Extensions class loader заменён на Platform class loader (`ClassLoader.getPlatformClassLoader()`). Механизм расширений (`java.ext.dirs`) удалён в связи с введением модульной системы JPMS.\n\n### Три этапа загрузки класса\n\n1. Загрузка (Loading) — поиск и импорт двоичных данных класса\n2. Связывание (Linking):\n   - Проверка (Verification) — проверка корректности байт-кода\n   - Подготовка (Preparation) — выделение памяти для статических полей и инициализация значениями по умолчанию\n   - Разрешение (Resolution) — преобразование символических ссылок в прямые\n3. Инициализация (Initialization) — выполнение статических инициализаторов и блоков `static {}`\n\n### Пользовательский загрузчик классов\n\nЗагрузчик классов написан на Java, поэтому можно создать собственный, унаследовав `ClassLoader`. Это позволяет:\n\n- Загружать или выгружать классы во время выполнения (динамическая загрузка из HTTP-ресурсов)\n- Изменять способ загрузки байт-кода (загрузка зашифрованного байт-кода)\n- Модифицировать загруженный байт-код (аспектно-ориентированное программирование)\n\n> **На собеседовании:** ключевые моменты — принцип делегирования (дочерний загрузчик сначала просит родителя), три этапа (загрузка, связывание, инициализация), и три стандартных загрузчика. Не забудьте упомянуть, что с Java 9 Extensions заменён на Platform class loader.","","junior",[7,15,16],"основы","classloader",[],null,{"title":20,"description":21,"ogTitle":20,"ogDescription":22,"keywords":23,"schemaAnswer":32,"featuredSnippetReady":33},"Что такое Classloader и как он работает — Gymterview","Classloader в JVM: иерархия загрузчиков (Bootstrap, Platform, System), три этапа загрузки класса, принцип делегирования. Пользовательские загрузчики классов.","Иерархия загрузчиков классов JVM: Bootstrap, Platform, System. Три этапа: загрузка, связывание, инициализация.",[24,25,26,27,8,28,29,30,31],"Classloader","загрузчик классов","Bootstrap","Platform class loader","делегирование","загрузка классов","Java","собеседование","Classloader — компонент JRE, динамически загружающий Java-классы в JVM по требованию. Использует принцип делегирования: дочерний загрузчик сначала просит родителя. Три загрузчика: Bootstrap (ядро Java), Platform (модули платформы, с Java 9), System (CLASSPATH). Три этапа загрузки: Loading, Linking (Verification, Preparation, Resolution), Initialization.",true]