Почему у jvm много clasloaders? почему бы и нет?

Я изучаю ClassLoader в Java, тогда я хочу знать, почему у JVM много загрузчиков классов, почему не только один? Первая загрузка <Java_Runtime_Home>/lib, затем загрузка <Java_Runtime_Home>/lib/ext и последняя загрузка classpath.

Если у вас есть пользовательский загрузчик классов, система сначала.

Кто-нибудь может сказать мне, почему у JVM много загрузчиков классов?

Ответ 1

Одним очень полезным приложением является возможность развертывания нескольких веб-приложений на одном сервере Java EE.

Каждое приложение может использовать разные версии одних и тех же библиотек и, следовательно, иметь другой загрузчик классов от других, чтобы иметь возможность иметь разные версии одних и тех же классов в одной JVM.

Ответ 2

Существует несколько причин поддерживать более одного загрузчика классов.

Во-первых: разделение классов. Представьте себе сервер приложений. Несколько независимых проектов могут включать одни и те же библиотеки. Если у каждого приложения есть свой собственный загрузчик классов, они могут загружать разные версии без столкновения, а статические поля AFAIK создаются для каждого загрузчика классов.

Второе: загрузчики классов могут быть перезаписаны для изменения классов. Загрузчик классов может повысить класс во время загрузки. Полезно для аспектно-ориентированного программирования (AspectJ) или добавления кода отладки или профилирования. Легкий способ изменить только одну библиотеку, но не другую, загружает ее через разные загрузчики классов.

Ответ 3

enter image description here Погрузчики классов являются иерархическими и используют модель делегирования при загрузке класса. Погрузчики класса родительский, чтобы сначала загрузить класс, прежде чем пытаться загрузить его самостоятельно. Когда загрузчик классов загружает класс, дочерний объект загрузчики классов в иерархии никогда не перезагружают класс снова. Следовательно, сохраняется единственность. Занятые классы с помощью загрузчика дочерних классов имеют видимость в классах, загруженных родителями, вверх по иерархии, но обратное не соответствует действительности как объяснено на приведенной выше диаграмме.

Ответ 4

Он позволяет запускать несколько приложений в одной JVM.

Он также позволяет вам разгружать части кода и обновлять их в запущенной системе. (даже если у вас есть только одно приложение)

Вы можете найти эту информацию о OSGi полезной http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html