Загрузчики классов в Java.



Пост о том, зачем нужны загрузчики классов, и почему по умолчанию их 3.



При компиляции исходный код преобразуется в файл с расширением .class. Когда в программе встречается имя нового класса, JVM "загружает" его: ищет файл с таким же именем и создаёт экземпляр типа Class. В этом объекте содержится информация о полях, методах и обо всём, что нужно для создания экземпляра.



Базовые классы JDK, такие как Object, String, ArrayList, являются основой для других объектов. Поэтому они загружаются на старте приложения, этим занимается объект JVM под названием Bootstrap ClassLoader.



Любая программа использует много сторонних библиотек. Чтобы не тратить ресурсы на загрузку лишних объектов, классы подгружаются по мере необходимости.



Какие события вызывают загрузку класса?

🔸Создание экземпляра:

new Example();

🔸Ссылка на статические поля/методы этого класса:

Example.getFormat();

🔸Явная загрузка класса:

cl.loadClass("Example");



Extension ClassLoader загружает редкие модули JDK: java.sql, jdk.httpserver и тд. Application ClassLoader загружает пользовательские классы.



Схема поиска подходящего .class файла выглядит так: