Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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