Предположим, что у меня есть 500 файлов банки, связанных с моей программой всего, более чем 500 МБ (размер всех банок, не каждого) и моя программа звонят классу, расположенному в одном из них. Как Java перерывает банки для класса, и какова эффективность этого? O (n)? O (журнал (n))?
Java ищет во внутренней структуре каталога банка точное совпадение с полным именем. Выглядит; не производит поиск. Если на класпате находится 500 банок, Java будет искать в них по одному в указанном порядке до тех пор, пока не найдет совпадение. Если банка, содержащая данный класс, является последней, Java будет искать в файлах 500 банок. Так что, думаю, это O(n).
UPDATE: Поведение, описанное выше, является поведением по умолчанию . Однако, как заметил Хасан, это поведение можно оптимизировать, предоставив JarIndex в корневом jar-файле, что позволит автору классов найти нужный jar-файл с простым поиском по имени пакета.
по умолчанию он использовался линейным; Однако, поскольку JDK 1.3 Индекс JAR может быть встроен в первый файл JAR из приложения.
Это означает, что если индекс встроен в файл JAR, классный погрузчик может эффективно найти все классы, распределенные по нескольким файлам JAR, принадлежащих к приложению.
Ссылка на Sun Resource на индексации банки. Примечание. Неклассные ресурсы, похоже, не покрываются.