假设我有500个jar文件链接到我的程序,总计超过500 MB(所有jar的大小,而不是每个jar),我的程序调用位于其中一个的类。 Java如何通过jar搜索类,这是什么效率?上)?为O(log(N))?
答案 0 :(得分:10)
Java在jar的内部目录结构中查找完全限定名称的完全匹配。它看起来;它没有搜索。如果类路径上有500个jar文件,Java将按指定顺序逐个查看它们,直到找到匹配项为止。如果包含给定类的jar是最后一个,那么Java将查看500个jar文件。所以我猜它是O(n)。
更新:上述行为是默认行为。但是,正如Hassan所指出的,这可以通过在根jar文件中提供JarIndex来优化,允许类加载器通过对包名称的简单查找来找到正确的jar文件。
答案 1 :(得分:7)
默认情况下,它曾是线性的;但是,由于JDK 1.3 JAR索引可以嵌入到应用程序的第一个JAR文件中。
这意味着如果索引嵌入到JAR文件中,则类加载器可以有效地查找分布在属于应用程序的多个JAR文件中的所有类。
关于JAR Indexing的SUN Resource链接。注意:似乎没有涵盖非类资源。