假設我有500個jar文件鏈接到我的程序總計超過500 MB(所有jar的大小,不是每個),我的程序打電話給位於其中一個類的類。 Java如何通過罐子搜索一個類,以及這樣做的效率如何?上)? O(日誌(n))的?Java如何有效地搜索類文件的jar文件?
回答
Java在jar的內部目錄結構中查找完全限定名稱的完全匹配。它看起來;它不搜索。如果在類路徑中有500個jar文件,Java將按照指定的順序逐個查找它們,直到它找到匹配。如果包含給定類的jar是最後一個,Java將查找500個jar文件。所以我想這是O(n)。
更新:上述行爲是默認行爲。但是,正如Hassan指出的那樣,可以通過在根jar文件中提供JarIndex來優化此功能,從而允許類加載程序通過簡單查找包名找到適當的jar文件。
默認情況下,它曾經是線性的;但是,由於JDK 1.3 JAR索引可以嵌入到應用程序的第一個JAR文件中。
這意味着如果索引嵌入到JAR文件中,類加載器可以高效地找到分佈在屬於應用程序的多個JAR文件上的所有類。
鏈接到SUN Resource JAR索引。注意:非類資源似乎沒有被覆蓋。
您是否認爲索引的使用很普遍?我認爲線性行爲仍然是默認行爲,您需要添加一個索引,而許多人不會。 – djna 2010-01-07 14:26:13
無論如何,所有的zip文件都有一個索引,所以它沒有太大的區別。 – 2010-01-07 14:28:04
hmm,看來ANT默認http://ant.apache.org/manual/CoreTasks/jar.html爲JAR文件中的索引生成。我不知道IDE是做什麼的? – 2010-01-07 14:29:41
- 1. 如何高效地搜索子文件
- 2. 更高效地搜索文本文件
- 3. 如何在JAR中搜索文件?
- 4. 搜索jar文件中的文件(包括要找到的jar文件中的Jython類文件)
- 5. Java文本文件搜索
- 6. 如何將java類添加到jar文件中的文件夾
- 7. 如何高效地搜索/替換一個大的txt文件?
- 8. 如何高效地搜索文件中的字符串?
- 9. 如何使Spring的@ComponentScan搜索組件包括JAR文件
- 10. 搜索文件 - java的
- 11. 搜索中的Java文件
- 12. 在JAR中的文件內搜索
- 13. 通過JSON文件搜索有效
- 14. 如何有效地管理一堆jar文件及其管道?
- 15. 如何從類目錄/ jar文件中避免java文件?
- 16. 如何高效地搜索文件系統(算法)?
- 17. 如何以編程方式在jar文件中搜索文本?
- 18. Java + jar文件
- 19. 如何在Vista中搜索文件(例如在Java文件中)?
- 20. 如何高效地管理Java文件系統上的文件?
- 21. 通過.jar文件搜索eclipse
- 22. Applet jar無法搜索文件
- 23. eclipse搜索資源包括jar文件
- 24. 如何使用外部java jar文件創建jar文件
- 25. 執行使用jar文件中的類的java類文件
- 26. 哪一個會更有效地搜索某種類型的文件?
- 27. AV引擎如何有效地搜索已知簽名的文件?
- 28. 文件夾中的Java搜索索引
- 29. IWorkspace搜索文件類型
- 30. 如何搜索文件?
在Java 7中,他們試圖通過支持類似於OSGi – notnoop 2010-01-07 14:17:35
(-1)的信息已過時的模塊系統進行贖回。 – 2010-01-07 14:23:10
@Hassan。索引是可選的,默認是線性的:新的類加載方案完全向後兼容當前擴展機制之上開發的應用程序。當類加載器加載第一個jar文件並在META-INF目錄中找到INDEX.LIST文件時,它將構造索引散列表併爲擴展使用新的加載方案。否則,類加載器將簡單地使用原始的線性搜索算法。 – djna 2010-01-07 14:23:19