2014-11-07 7 views
15

Sappiamo che jar è un formato di file di archivio compresso che funge da contenitore per classi java compilate e file conf. Per quanto ne so, per leggere qualsiasi contenuto da un file contenitore compresso, prima devono essere estratti da qualche parte.Come viene eseguito un file jar? Le lezioni vengono estratte da qualche parte?

Quindi, come JVM esegue le classi all'interno del vaso? Estrae il contenuto del barattolo in una posizione temporanea e quindi esegue le classi?

+0

correlati: http://stackoverflow.com/questions/13927217/what-happens-when-java-program-starts –

+0

I dati pacchettizzati vengono estratti direttamente in memoria e non memorizzati temporaneamente su disco. –

risposta

18

La JVM è in grado di caricare classi o file da un file jar senza estrarre il jar in file temporanei.

Questa funzionalità è disponibile anche nella libreria standard, vedere JarFile per ulteriori informazioni.

Quindi no, la JVM non estrae un jar per i file temporanei, le classi (e le risorse) vengono semplicemente caricate su richiesta.

Un file jar è fondamentalmente un file zip con una voce predefinita "META-INF/MANIFEST.MF" (questo è obbligatorio solo nel caso di un jar eseguibile). Questa voce (file) MANIFEST.MF contiene alcune informazioni lette dalla JVM. Altro su File di manifesto:

Working with Manifest Files: The Basics

In caso di jar eseguibile il file manifesto contiene anche la classe principale che deve essere caricato e la cui public static void main(String[]) metodo da chiamare, al fine di avviare l'applicazione. La voce manifesta Main-Class specifica la classe principale:

Main-Class: classname 
1

No JVM estrae il file jar alla memoria e non al file. Legge il MANIFEST.MF all'interno di META-INF che ha una voce per la classe principale. Jvm cerca la classe principale vuota statica pubblica all'interno di questa classe principale. Ecco come jvm trova la classe principale ed esegue i file jar eseguibili

+2

Non proprio corretto. I contenuti JAR * sono * estrapolati, ma alla memoria, non al file. Una JVM potrebbe difficilmente eseguire direttamente bytecode con ZIP, no? – DevSolar

Problemi correlati