Как Java эффективно ищет jar-файлы для классов? - PullRequest
12 голосов
/ 07 января 2010

Предположим, у меня есть 500 файлов jar, связанных с моей программой, общим объемом более 500 МБ (размер всех файлов jar, а не каждого), и моя программа вызывает класс, расположенный в одном из них. Как Java выполняет поиск в jar-классе для класса и какова эффективность этого? На)? O (журнал (п))

Ответы [ 2 ]

10 голосов
/ 07 января 2010

Java ищет во внутренней структуре каталогов jar точное совпадение с полным именем. Это выглядит; это не поиск. Если у вас есть 500 jar-файлов на пути к классам, Java будет просматривать их один за другим в указанном порядке, пока не найдет совпадение. Если jar, содержащий данный класс, является последним, Java будет искать файлы 500 jar. Так что я думаю, что это O (n).

ОБНОВЛЕНИЕ: Поведение, описанное выше, является поведением по умолчанию . Однако, как отметил Хасан, это можно оптимизировать, предоставив JarIndex в корневом файле JAR, позволяющий загрузчику классов найти правильный файл JAR с простым поиском по имени пакета.

7 голосов
/ 07 января 2010

По умолчанию он был линейным; однако, поскольку JDK 1.3 , индекс JAR может быть встроен в первый файл JAR приложения.

Это означает, что если индекс встроен в файл JAR, загрузчик классов может эффективно найти все классы, распределенные по нескольким файлам JAR, принадлежащим приложению.

ссылка на Ресурс SUN при индексировании JAR. Примечание: ресурсы, не относящиеся к классу, по-видимому, не охвачены.

...