Как Java эффективно ищет файлы банки классы?

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

12
задан mring 7 January 2010 в 14:01
поделиться

2 ответа

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

UPDATE: Поведение, описанное выше, является поведением по умолчанию . Однако, как заметил Хасан, это поведение можно оптимизировать, предоставив JarIndex в корневом jar-файле, что позволит автору классов найти нужный jar-файл с простым поиском по имени пакета.

10
ответ дан 2 December 2019 в 19:54
поделиться

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

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

Ссылка на Sun Resource на индексации банки. Примечание. Неклассные ресурсы, похоже, не покрываются.

7
ответ дан 2 December 2019 в 19:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: