2016-06-18 2 views
-1

EDIT:Какая польза от использования иерархии загрузчика классов?

Можем ли мы не удалять все банки в jre/lib-папке jdk и использовать BootstrapClassLoader как единственный загрузчик классов?

+0

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

+0

Спасибо за отзыв. Я отредактировал вопрос. –

+0

Итак, вы хотите знать, почему существует различие между загрузчиком классов загрузки и системным загрузчиком классов? Или почему могут существовать дополнительные загрузчики классов за пределами системного загрузчика классов? – the8472

ответ

0

Каждый проект имеет различный набор зависимостей (и разных версий). Classloaders не могут обрабатывать разные версии одного и того же класса - они просто берут первый класс, который они находят на своем классе с именем (например, com.example.MyClass (по крайней мере, пока все не будет модульным в JDK 9). Итак, вы хотите каждый проект загружает классы из другого пути, а не из общего пути. Например, проекты maven загружают свои зависимости из $ HOME/.m2/repository.

+0

Спасибо за ответ. Но почему и где нам нужно иметь разные версии зависимости? –

+0

На машине, как правило, будет несколько программ Java (так же, как будет несколько программ C/Python/Perl/Ruby). Каждый из них может иметь разные версии зависимостей, такие как библиотека регистрации. – Salil

1

Загрузочный загрузчик класса Bootstrap имеет специальную цель, встроенный в классы. Это единственный классный загрузчик, который может это сделать. Когда вы добавляете URL ClassLoader, он может загружать дополнительные JAR/каталоги, но они не могут содержать встроенные пакеты. Это предотвращает взлома JVM.

В короткий минимум - два, загрузчик системного класса и пользовательский интерфейс, s загрузчик классов.

+0

@ Peter-Мы можем создать наш собственный загрузчик классов и переопределить метод loadClass. При этом нам не нужно реализовывать модель делегирования, а пользовательский загрузчик классов может просто загружать классы, загружаемые загрузчиком загрузки bootstrap. –

+0

@RahulMathur кроме этого не позволит, но вы можете попробовать. –

+0

Как JVM собирается остановить меня? Поддерживает ли он список файлов в lib/ext и бросает ClassNotFound Exception, если имя класса соответствует любому элементу в списке? –

Смежные вопросы