Почему у jvm много clasloaders? почему бы и нет?
Я изучаю ClassLoader
в Java, тогда я хочу знать, почему у JVM много загрузчиков классов, почему не только один? Первая загрузка <Java_Runtime_Home>/lib
, затем загрузка <Java_Runtime_Home>/lib/ext
и последняя загрузка classpath
.
Если у вас есть пользовательский загрузчик классов, система сначала.
Кто-нибудь может сказать мне, почему у JVM много загрузчиков классов?
Ответы
Ответ 1
Одним очень полезным приложением является возможность развертывания нескольких веб-приложений на одном сервере Java EE.
Каждое приложение может использовать разные версии одних и тех же библиотек и, следовательно, иметь другой загрузчик классов от других, чтобы иметь возможность иметь разные версии одних и тех же классов в одной JVM.
Ответ 2
Существует несколько причин поддерживать более одного загрузчика классов.
Во-первых: разделение классов.
Представьте себе сервер приложений. Несколько независимых проектов могут включать одни и те же библиотеки. Если у каждого приложения есть свой собственный загрузчик классов, они могут загружать разные версии без столкновения, а статические поля AFAIK создаются для каждого загрузчика классов.
Второе: загрузчики классов могут быть перезаписаны для изменения классов.
Загрузчик классов может повысить класс во время загрузки. Полезно для аспектно-ориентированного программирования (AspectJ) или добавления кода отладки или профилирования. Легкий способ изменить только одну библиотеку, но не другую, загружает ее через разные загрузчики классов.
Ответ 3
Погрузчики классов являются иерархическими и используют модель делегирования при загрузке класса. Погрузчики класса
родительский, чтобы сначала загрузить класс, прежде чем пытаться загрузить его самостоятельно. Когда загрузчик классов загружает класс, дочерний объект
загрузчики классов в иерархии никогда не перезагружают класс снова. Следовательно, сохраняется единственность. Занятые классы
с помощью загрузчика дочерних классов имеют видимость в классах, загруженных родителями, вверх по иерархии, но обратное не соответствует действительности
как объяснено на приведенной выше диаграмме.
Ответ 4
Он позволяет запускать несколько приложений в одной JVM.
Он также позволяет вам разгружать части кода и обновлять их в запущенной системе. (даже если у вас есть только одно приложение)
Вы можете найти эту информацию о OSGi полезной http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html