2014-11-07 6 views
15

Wiemy, że jar jest skompresowanym formatem pliku archiwum, który działa jako kontener skompilowanych klas java i plików conf. O ile wiem, do odczytu jakiejkolwiek zawartości ze skompresowanego pliku kontenera, najpierw trzeba je gdzieś wyodrębnić.W jaki sposób plik JAR zostanie wykonany? Czy zajęcia gdzieś się pobierają?

W jaki sposób JVM przeprowadza klasy wewnątrz słoika? Czy wyodrębnia zawartość słoika do lokalizacji tymczasowej, a następnie wykonuje klasy?

+0

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

+0

Zapakowane dane są wyodrębniane bezpośrednio do pamięci i nie są tymczasowo przechowywane na dysku. –

Odpowiedz

18

Maszyna wirtualna JVM może ładować klasy lub pliki z pliku JAR bez wyodrębniania plików słownika do plików tymczasowych.

Ta funkcja jest również dostępna w standardowej bibliotece, więcej informacji można znaleźć w JarFile.

Więc nie, JVM nie wyodrębnia słoika do plików tymczasowych, klasy (i zasoby) są po prostu ładowane na żądanie.

Plik jar to w zasadzie plik zip z predefiniowanym wpisem "META-INF/MANIFEST.MF" (jest to obowiązkowe tylko w przypadku pliku wykonywalnego). Ten wpis (plik) MANIFEST.MF zawiera informacje odczytane przez maszynę JVM. Więcej informacji na temat plików manifestu:

Working with Manifest Files: The Basics

W przypadku wykonywalnego słoika plik Manifest zawiera również główne klasy, które powinny być ładowane i którego public static void main(String[]) metoda na miano w celu uruchomienia aplikacji. Main-Class manifest wpis określa główne klasy:

Main-Class: classname 
1

No JVM pobiera plik jar w pamięci, a nie do pliku. Odczytuje MANIFEST.MF wewnątrz META-INF, który ma wpis dla głównej klasy. Jvm szuka publicznej statycznej pustki głównej klasy w tej głównej klasie. W ten sposób jvm znajduje główną klasę i wykonuje pliki JAR wykonywalny

+2

Niezupełnie poprawne. Zawartość JAR * jest * wydobyta, ale do pamięci, a nie do pliku. JVM z trudem może wykonać bezpośredni kod bajtowy ZIP, prawda? – DevSolar

Powiązane problemy