Предположим, у меня есть 500 файлов jar, связанных с моей программой на общую сумму более 500 МБ (размер всех банок, а не каждый), и моя программа делает вызов класса, расположенного в одном из них. Как Java ищет через jars для класса, и какова эффективность этого? На)? O (журнал (п))?Как Java эффективно ищет файлы jar для классов?
ответ
Java ищет во внутренней структуре каталогов банку для точного соответствия по полному имени. Это выглядит; он не ищет. Если у вас есть 500 файлов jar в пути к классам, Java будет выглядеть в них один за другим в указанном порядке, пока не найдет совпадение. Если jar, содержащий данный класс, является последним, Java будет выглядеть в 500 файлах jar. Поэтому я думаю, что это O (n).
ОБНОВЛЕНИЕ: Поведение, описанное выше, является поведением по умолчанию. Однако, как отметил Хасан, это можно оптимизировать, предоставив JarIndex в файле корневого jar, позволяя загрузчику классов найти правильный файл jar с простым поиском по имени пакета.
По умолчанию он был линейным; однако, поскольку JDK 1.3 индекс JAR может быть встроен в первый файл JAR приложения.
Это означает, что если индекс встроен в файл JAR, загрузчик классов может эффективно находить все классы, распределенные по нескольким JAR-файлам, принадлежащим приложению.
ссылка на SUN Resource на индексирование JAR. Примечание. Ресурсы неклассификации, похоже, не покрываются.
Вы считаете, что использование индексов является общим? Я думаю, что все еще линейное поведение по умолчанию, вам нужно добавить индекс, и многие люди этого не делают. – djna
Все почтовые индексы имеют индекс в конце файла, так что это не имеет большого значения. –
hmm. Кажется, ANT по умолчанию присваивает значение http://ant.apache.org/manual/CoreTasks/jar.html false для генерации индекса в JAR-файлах. Интересно, что делают IDE? –
- 1. Где файл .jar ищет входные файлы?
- 2. Как эффективно использовать файлы других классов?
- 3. Как сделать файлы классов в JAR-файл
- 4. Как использовать файлы классов внутри файла jar?
- 5. Как получить файлы источника jar для классов JavaFX?
- 6. Как анализировать файлы классов Java?
- 7. Как «декомпилировать» файлы классов Java?
- 8. Java-как получить код java-кода классов и jar-файлов
- 9. JAR для трех классов?
- 10. apache poi jar отсутствует файлы классов
- 11. Когда Java JVM распаковывает jar-файлы?
- 12. Как сделать файлы классов unisassemblable
- 13. Защита Java jar Файлы для распространения
- 14. Java: файлы классов упаковки
- 15. Файлы Jar для Java-адаптера WL
- 16. Java jar файлы без библиотек
- 17. Как загрузить некоторые файлы библиотеки java jar
- 18. JAR, когда запускается, ищет файлы ресурсов внутри JAR (selfe) или снаружи?
- 19. как вы выполняете .JAR-файлы в java
- 20. Как скомпилировать файлы .java в файл .jar?
- 21. Java .jar файлы и зависимости
- 22. Файлы Java Jar не выполняются
- 23. Внешние файлы jar в Java
- 24. hive ищет hdfs частную директорию для jar
- 25. Eclipse не ищет java-файлы, созданные JavaCC
- 26. Как читать .sql-файлы внутри Java-jar?
- 27. Как исключить java-файлы из jar в maven-jar-plugin?
- 28. Embedded Jetty ищет файлы в своем файле Jar
- 29. Eclipse не ищет файлы в Maven загруженных файлов jar
- 30. Как создать файл библиотеки (файл jar) из моих классов Java?
В Java 7 они пытаются выкупить это, поддерживая модульную систему, аналогичную OSGi – notnoop
(-1), которая устарела. –
@ Хасан. Индексы являются необязательными, по умолчанию действительно линейно: новая схема загрузки классов полностью обратно совместима с приложениями, разработанными поверх существующего механизма расширения. Когда загрузчик классов загружает первый файл jar и файл INDEX.LIST находится в каталоге META-INF, он будет строить таблицу хеш-индекса и использовать новую схему загрузки для расширения. В противном случае загрузчик классов будет просто использовать оригинальный алгоритм линейного поиска. – djna