2013-08-13 3 views
26

В java говорится, что все классы загружаются загрузчиками классов.Как загружается загрузчик классов загрузки Java Bootstrap Classloader?

В первую очередь, загрузчик классов bootstrap загружает все классы rt.jar.

Так что я до сих пор путают, как ClassLoader также класс, так, кто будет нагрузки это BootStrapClassloader.

Просьба объяснить.

+0

См. Два подробных ответа (особенно по amicngh) http://stackoverflow.com/questions/11395074/who-load-the-java-system-classloader. Также здесь: http://www2.sys-con.com/itsg/virtualcd/java/archives/0808/chaudhri/index.html – mins

+0

См. Http://www.javabench.in/2012/02/java-class -loading.html –

+0

Верно, что многие классы из rt, jar загружаются загрузчиком bootstrap, но не все. Для подтверждения просто запустите простую программу с аргументом -verbose: class, например «java -verbose: class HelloWorld». Это даст всем загруженным классам JVM. Вы можете заметить, что каждый класс из rt.jar не загружается JVM. – hsingh

ответ

8

Загрузочный загрузчик классов, являющийся загрузчиком классов и всего, на самом деле является частью ядра JVM и написан в собственном коде.

Погрузчики классов могут быть объектами, им также требуется представление. Фактически это также позволяет создавать пользовательские загрузчики классов.

3

Существует идиома на английском языке: «Он поднялся на свои бутстрапы». Сапоги-ремни - это маленькие ручки верхних ботинок сапог и, конечно же, невозможные.

http://en.wikipedia.org/wiki/Booting

В статье объясняется процесс загрузки компьютера, который короток для самонастройки.

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

Для Java загрузочный планер-загрузчик может быть или не быть классом Java. (Возможно, кто-то знает.) Но это какая-то программа, которая загружает первые несколько классов в память и заставляет JVM начать выполнение этих бит загруженного Java-кода. Возможно, он загружает сам код JVM. Возможно, это просто гарантирует, что какой-то предшествующий бит кода загрузил JVM. Возможно, это даже требует, чтобы JVM уже был загружен и запущен.

Его просто часть процесса.

+0

Два цента: 1) Спасибо за напоминание, я просто поддержал. 2) Первая половина этого ответа хороша. Вторая половина полна неуверенности. Я добавил к нему му биты, но кто-то не считал их подходящими. –

+0

Если вы ищете полный ответ, прочитайте мой ответ ниже. (Я не дую в своей трубе, но у нее есть ответы от всех возможных) –

+0

@ Raúl Я хотел сказать, что неважно, какой код загружает код на каждом этапе создания Java. Само собой разумеется, что в каждой ОС это должен быть собственный код, который запускается. ОС загружает только собственный код. Это приносит что-то маленькое, которое загружает нечто большее. Процесс повторяется с каждой загруженной, в свою очередь, загрузкой чего-то большего, пока все это не будет. Чем меньше первая часть, тем меньше нативный код необходим для каждой ОС и более общий код для всех ОС. Но неважно, сколько этапов для загрузки. –

23

Ответ: Когда запускается JVM, запускается специальный кусок машинного кода, загружающий загрузчик системных классов. Этот машинный код известен как Загрузочный лот/Приморский (или иногда - Null) classloader.

Это не класс Java вообще, как и все другие загрузчики классов. Загрузочный загрузчик bootstrap - это машинные инструкции, специфичные для платформы, которые запускают весь процесс загрузки классов.

Все загрузчики классов, за исключением загрузчика классов bootstrap, реализованы как классы Java. Что-то должно загрузить самый первый загрузчик классов Java, чтобы запустить процесс. Загрузка первого чистого Java-загрузчика классов - это задача загрузчика классов bootstrap.

Загрузочный загрузчик bootstrap также берет на себя загрузку всего кода, необходимого для поддержки базовой среды Java Runtime Environment (JRE), включая классы в java.util и java.lang-пакетах.

Источник: http://www.theserverside.com/tutorial/Classloaders-Demystified-Understanding-How-Java-Classes-Get-Loaded-in-Web-Applications

+2

Трудно сказать, говорите ли вы, что все загрузчики классов НЕ являются Java-классами. Возможно, вы говорите, что все классы-загрузчики ARE Java-классы. Использование запятых делает его неоднозначным. (Это в первом предложении вашего 2-го абзаца.) –

+0

Я имею в виду, что в среде Java - только Bootstrap CL будет загрузчиком класса non java (native); остальные из них (система, приложение, пользовательские CL и т. д.) являются загрузчиками классов Java ............. PLS см. ссылку. –

-1

JDK установлен путь: jdk\jre\lib\rt.jar

это место называется путь самозагрузки класса. Загрузочный загрузчик класса Bootstrap отвечает за загрузку классов из пути класса bootstrap.

Загрузочный загрузчик класса Bootprap по умолчанию доступен в JVM. Он реализован на языке родного языка C и C++.

-2

Загрузочный загрузчик класса загрузки загружает основные библиотеки Java, расположенные в каталоге/jre/lib. Этот загрузчик классов, который является частью основного JVM, написан в собственном коде.