Как выполняется файл jar? Разве классы извлекаются где-то?

Мы знаем, что jar - это сжатый формат архивного файла, который выступает в качестве контейнера для скомпилированных классов Java и файлов conf. Насколько мне известно, для чтения любого содержимого из файла сжатого контейнера сначала их нужно где-то извлечь.

Итак, как JVM выполняет классы внутри банки? Извлекает ли содержимое контейнера временное местоположение, а затем выполняет классы?

Ответы

Ответ 1

JVM способен загружать классы или файлы из файла jar без извлечения jar в файлы temp.

Эта функциональность также доступна вам в стандартной библиотеке, см. JarFile для получения дополнительной информации.

Итак, нет, JVM не извлекает банку в файлы temp, классы (и ресурсы) просто загружаются по требованию.

Файл jar в основном представляет собой zip файл с предопределенной записью "META-INF/MANIFEST.MF" (это является обязательным только в случае исполняемого баннера). Эта запись MANIFEST.MF (файл) содержит некоторую информацию, прочитанную JVM. Подробнее о файлах манифеста:

Работа с файлами манифеста: основы

В случае исполняемого баннера файл манифеста также содержит основной класс, который должен быть загружен, и метод public static void main(String[]), который должен быть вызван для запуска приложения. Запись манифеста Main-Class указывает основной класс:

Main-Class: classname

Ответ 2

Нет. jvm извлекает файл jar в память, а не в файл. Он читает MANIFEST.MF внутри META-INF, который имеет запись для основного класса. Jvm ищет публичный статический основной класс void внутри этого основного класса. Вот как jvm находит основной класс и выполняет исполняемые файлы jar