Java Classloader

Java Classloader (дослівно завантажувач класів Java) є частиною Java Runtime Environment, що динамічно завантажує Java класи в Java Virtual Machine.[1] Зазвичай класи завантажуються тільки за запитом (англ. on demand). Завдяки цьому, Java рантайм не має необхідності знати про файли і файлові системи, оскільки це делеговано завантажувачу класів.

У мові Java, бібліотеки, як правило, упаковані у файли Jar. Бібліотеки можуть містити об'єкти різних типів. Найважливішим об'єктом є клас. Java Classloader відповідальний за знаходження бібліотек, прочитання вмісту та завантаження класів що містяться в бібліотеках. Часто завантаження класів здійснюється на вимогу.

Процес завантаження класів

Кожен клас Java повинен бути завантажений завантажувачем класів. Коли JVM стартує, три завантажувачі класів використовуються:

  1. Bootstrap завантажувач класів
  2. Extensions завантажувач класів
  3. System завантажувач класів

Bootstrap завантажувач класів завантажує бібліотеки ядра Java(<JAVA_HOME>/lib директорія). Цей завантажувач класів, є частиною ядра JVM, написаний в придатному для цієї операційної системи коді.

Extensions завантажувач класів завантажує код в директорії <JAVA_HOME>/lib/ext чи в іншій директорії, яка прописана у параметрі java.ext.dirs. Імплементаця в sun.misc.Launcher$ExtClassLoader.

System(системний) завантажувач класів завантажує класи що розташовані за шляхом java.class.path, який мапується CLASSPATH системною змінною. Імплементований класом sun.misc.Launcher$AppClassLoader.

Примітки

  1. Mcmanis, Chuck (1 жовтня 1996). The basics of Java class loaders. JavaWorld. Архів оригіналу за 28 лютого 2021. Процитовано 13 липня 2020.

Посилання

  • Chuck Mcmanis, "The basics of Java class loaders [Архівовано 13 липня 2011 у Wayback Machine.]", 1996
  • Brandon E. Taylor, "Java Class Loading: The Basics [Архівовано 9 листопада 2020 у Wayback Machine.]", 2003
  • Jeff Hanson, "Take Control of Class Loading in Java [Архівовано 4 грудня 2020 у Wayback Machine.]", 2006-06-01
  • Andreas Schaefer, "Inside Class Loaders [Архівовано 6 травня 2018 у Wayback Machine.]", 2003-11-12
  • Sheng Liang and Gilad Bracha, "Dynamic class loading in the Java virtual machine [Архівовано 19 квітня 2008 у Wayback Machine.]", In Proceedings of the 13th ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'98), ACM SIGPLAN Notices, vol. 33, no. 10, ACM Press, 1998, pp. 36–44
  • Dr. Christoph G. Jung, "Classloaders Revisited Hotdeploy [Архівовано 13 червня 2019 у Wayback Machine.]", Java Specialist Newsletter, 2001-06-07
  • Don Schwarz, "Managing Component Dependencies Using ClassLoaders [Архівовано 3 березня 2016 у Wayback Machine.]", 2005-04-13