2013-08-13 9 views
26

In java, si dice che tutte le classi vengano caricate dai classloader.Come viene caricato il Bootloader Bootstrap Java?

Quindi, prima di tutto, il programma di caricamento automatico bootstrap carica tutte le classi rt.jar.

Così sto ancora confuso come programma di caricamento classi è anche una classe, così chi lo farà carico questo BootStrapClassloader.

Gentilmente spiegare.

+0

Vedere due risposte dettagliate (in particolare da amicngh) http://stackoverflow.com/questions/11395074/who-load-the-java-system-classloader. Anche qui: http://www2.sys-con.com/itsg/virtualcd/java/archives/0808/chaudhri/index.html – mins

+0

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

+0

È vero che molte classi di rt, jar vengono caricate dal bootloader del programma di caricamento, ma non tutte. Per confermare basta eseguire un semplice programma con -verbose: argomento di classe come "java -verbose: class HelloWorld". Darà tutte le classi caricate dalla JVM. È possibile notare che ogni classe di rt.jar non viene caricata da JVM. – hsingh

risposta

8

Il Bootstrap Classloader, essendo un classloader e tutto, è in realtà una parte di JVM Core ed è scritto in codice nativo.

I caricatori di classe possono essere oggetti, hanno bisogno anche di una rappresentazione. In effetti, ciò consente anche la creazione di classloader definiti dall'utente.

3

C'è un idioma in inglese: "Si è tirato su dai suoi stivali". Le cinghie di avvio sono le maniglie dei lati superiori degli stivali e, ovviamente, è impossibile.

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

L'articolo spiega il processo di avvio di un computer, che è l'abbreviazione di bootstrap.

Ciò che accade con ogni programma di ogni tipo è che un caricatore di qualche tipo copia alcuni byte in memoria da qualche parte e inizia l'esecuzione in un posto predefinito in quei byte.

Per Java, il caricatore della cinghia di avvio può essere o meno una classe Java. (Qualcuno probabilmente lo sa.) Ma è un programma di qualche tipo che carica le primissime classi in memoria e fa sì che la JVM inizi ad eseguire quei bit di codice Java caricato. Forse carica il codice JVM stesso. Forse si limita ad assicurarsi che un po 'di codice precedente abbia caricato la JVM. Forse, richiede addirittura che la JVM sia già stata caricata e in esecuzione.

È solo una parte del processo.

+0

Due centesimi: 1) Grazie per il promemoria, ho appena svalutato. 2) La prima metà di questa risposta è buona. La seconda metà è piena di incertezza. Ho aggiunto dei mu bit, ma qualcuno non li ha considerati appropriati. –

+0

Se stai cercando una risposta completa, leggi la mia risposta qui sotto. (Non sto suonando la mia tromba, ma ha le risposte di tutti i may-bes) –

+0

@ Raúl Il mio punto era che non importa che tipo di codice sta caricando il codice in ogni fase di avvio di Java. Inutile dire che, su ciascun sistema operativo, deve essere il codice nativo che inizia a funzionare. Un sistema operativo carica solo il codice nativo. Porta in qualcosa di piccolo che carica qualcosa di più grande. Il processo si ripete con ogni cosa caricata, a sua volta, caricando qualcosa di più grande fino a quando non è tutto lì. Più piccola è la prima parte, minore è il codice nativo necessario per ciascun sistema operativo e il codice più comune per tutti i sistemi operativi. Ma non importa quante fasi ci sono per il caricamento. –

23

Risposta: All'avvio di JVM, viene eseguito un blocco speciale di codice macchina che carica il classloader di sistema. Questo codice macchina è noto come il/Primordial Bootstrap (oa volte - Null) classloader.

Non è affatto una classe Java, come tutti gli altri classloader. Il classloader bootstrap è istruzioni macchina specifiche della piattaforma che danno il via all'intero processo di classloading.

Tutti i programmi di caricamento classe, con l'eccezione del programma di caricamento di classe bootstrap, sono implementati come classi Java. Qualcosa deve caricare il primissimo classloader Java per avviare il processo. Il caricamento del primo puro programma di caricamento classi Java è il lavoro del programma di caricamento di classe bootstrap.

Il programma di caricamento di classe bootstrap si occupa anche del caricamento di tutto il codice necessario per supportare il Java Runtime Environment (JRE) di base, incluse le classi nei pacchetti java.util e java.lang.

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

+2

È difficile dire se stai dicendo che tutti i classloader NON sono classi Java. Forse stai dicendo che tutti i classloader SONO classi Java. L'uso di virgole lo rende ambiguo. (Questo è nella prima frase del 2 ° paragrafo.) –

+0

Voglio dire, in ambiente Java - solo Bootstrap CL sarà un programma di caricamento classe non nativo (nativo); il resto di loro (sistema, applicazione, CLs definiti dall'utente ecc.) sono caricatori di classi Java ............. vedere il collegamento. –

-1

JDK percorso installato: jdk\jre\lib\rt.jar

questa posizione si chiama percorso di classe di bootstrap. Il caricatore di classi Bootstrap è responsabile del caricamento delle classi dal percorso della classe di avvio.

Il caricatore di classe Bootstrap è disponibile di default con JVM. È implementato in linguaggio nativo come C e C++.

-2

Il programma di caricamento classe boot carica le librerie Java core situate nella directory/jre/lib. Questo programma di caricamento classe, che fa parte della JVM principale, è scritto in codice nativo.

Problemi correlati