2013-08-13 5 views
26

In Java heißt es, dass alle Klassen von Klassenladern geladen werden.Wie wird der Java Bootstrap Classloader geladen?

Zunächst lädt der Bootstrap-Classloader alle rt.jar-Klassen.

So bin ich immer noch so verwirrt Classloader ist auch eine Klasse, also wer wird Last diese BootStrapClassloader.

Bitte erklären.

+0

Siehe zwei detaillierte Antworten (vor allem von amicngh) http://stackoverflow.com/questions/11395074/who-load-the-java-system-classloader. Auch hier: http://www2.sys-con.com/itsg/virtualcd/java/archives/0808/chaudhri/index.html – mins

+0

Siehe http://www.javabench.in/2012/02/java-class -loading.html –

+0

Es stimmt, dass viele Klassen von rt, jar von bootstrap classloader geladen werden, aber nicht alle. Zur Bestätigung einfach ein einfaches Programm mit -verbose: class Argument wie "java -verbose: class HelloWorld" ausführen. Es wird alle geladenen Klassen von der JVM geben. Sie können feststellen, dass jede Klasse von rt.jar nicht von der JVM geladen wird. – hsingh

Antwort

8

Die Bootstrap Classloader, ein Classloader und alle, ist eigentlich ein Teil des JVM Core und es ist in nativem Code geschrieben.

Klassenlader können Objekte sein, sie benötigen auch eine Darstellung. In der Tat ermöglicht dies auch die Erstellung von benutzerdefinierten Klassenladern.

3

Es gibt ein Idiom auf Englisch, "Er zog sich an seinen Bootstraps hoch." Die Stiefelriemen sind die kleinen Griffe an den Oberseiten der Stiefel und natürlich ist es unmöglich.

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

Der Artikel beschreibt den Prozess einen Computer von Booten, die für Bootstrapping kurz ist.

Was mit jedem Programm jedes Typs passiert, ist, dass ein Loader irgendeiner Art einige Bytes irgendwo in den Speicher kopiert und die Ausführung an einer vordefinierten Stelle in diesen Bytes beginnt.

Für Java ist der Boot Strap Loader möglicherweise eine Java-Klasse. (Jemand weiß es wahrscheinlich.) Aber es ist ein Programm, das die allerersten Klassen in den Speicher lädt und die JVM veranlaßt, mit dem Ausführen dieser Bits von geladenem Java-Code zu beginnen. Vielleicht lädt es den JVM-Code selbst. Vielleicht stellt es nur sicher, dass vorher ein bisschen Code die JVM geladen hat. Vielleicht ist es sogar erforderlich, dass die JVM bereits geladen und ausgeführt wurde.

Es ist nur ein Teil des Prozesses.

+0

Zwei Cent: 1) Danke für die Erinnerung, ich habe gerade gestimmt. 2) Die erste Hälfte dieser Antwort ist gut. Die zweite Hälfte ist voller Ungewissheit. Ich fügte mu-Bits hinzu, aber jemand hielt sie nicht für angemessen. –

+0

Wenn Sie nach einer vollständigen Antwort suchen, lesen Sie meine Antwort unten. (Ich blase nicht meine Trompete, aber es hat die Antworten aller may-bes) –

+0

@ Raúl Mein Punkt war, dass es egal ist, welche Art von Code den Code in jedem Schritt Java zu bringen lädt. Es versteht sich von selbst, dass es auf jedem Betriebssystem nativen Code geben muss, der gestartet wird. Ein OS lädt nur systemeigenen Code. Es bringt etwas Kleines, das etwas Größeres lädt. Der Prozess wiederholt sich mit jedem geladenen Ding, das wiederum etwas größeres lädt, bis alles da ist. Je kleiner der erste Teil ist, desto weniger systemeigener Code wird für jedes Betriebssystem und der häufigere Code für alle Betriebssysteme benötigt. Aber es spielt keine Rolle, wie viele Stufen es zum Laden gibt. –

23

Antwort: Wenn eine JVM gestartet wird, wird ein spezieller Teil des Maschinencodes ausgeführt, der den Systemklassenlader lädt. Dieser Maschinencode ist als Bootstrap/Primordial (oder manchmal - Null) Classloader bekannt.

Es ist überhaupt keine Java-Klasse, wie alle anderen Klassenlader. Der Bootstrap-Classloader ist eine plattformspezifische Maschinenanweisung, die den gesamten Classloading-Prozess startet.

Alle Klassenladeprogramme, mit Ausnahme des Bootstrap Classloaders, sind als Java-Klassen implementiert. Etwas muss den allerersten Java-Klassenlader laden, damit der Prozess gestartet wird. Das Laden des ersten reinen Java-Classloaders ist Aufgabe des Bootstrap-Classloaders.

Der Bootstrap-Classloader kümmert sich auch um das Laden des gesamten für die Unterstützung der Java Runtime Environment (JRE) erforderlichen Codes, einschließlich der Klassen java.util und java.lang.

Quelle: http://www.theserverside.com/tutorial/Classloaders-Demystified-Understanding-How-Java-Classes-Get-Loaded-in-Web-Applications

+2

Es ist schwer zu sagen, ob Sie sagen, dass alle Klassenlader NICHT Java-Klassen sind. Vielleicht sagen Sie, dass alle Klassenleser Java-Klassen sind. Die Verwendung von Kommas macht es mehrdeutig. (Dies ist im ersten Satz des zweiten Absatzes.) –

+0

Ich meine, in Java-Umgebung - nur Bootstrap CL wird ein nicht-Java (native) Klassenlader; Der Rest von ihnen (System, Anwendung, benutzerdefinierte CLs usw.) sind Java Class Loader ............. siehe den Link. –

-1

JDK installiert Pfad: jdk\jre\lib\rt.jar

dieser Standort Bootstrap-Classpath bezeichnet. Der Bootstrap-Klassenlader ist dafür verantwortlich, Klassen aus dem Bootstrap-Klassenpfad zu laden.

Der Bootstrap-Klassenlader ist standardmäßig mit der JVM verfügbar. Es ist in Native Language wie C und C++ implementiert.

-2

Der Bootstrap-Klassenlader lädt die Java-Kernbibliotheken im Verzeichnis/jre/lib. Dieser Klassenlader, der Teil der Kern-JVM ist, wird in nativem Code geschrieben.