【发布时间】:2010-01-07 14:01:41
【问题描述】:
假设我有 500 个 jar 文件链接到我的程序,总大小超过 500 MB(所有 jar 的大小,而不是每个 jar),并且我的程序调用位于其中一个中的类。 Java如何通过jar搜索一个类,效率如何?在)? O(log(n))?
【问题讨论】:
标签: java algorithm search jar performance
假设我有 500 个 jar 文件链接到我的程序,总大小超过 500 MB(所有 jar 的大小,而不是每个 jar),并且我的程序调用位于其中一个中的类。 Java如何通过jar搜索一个类,效率如何?在)? O(log(n))?
【问题讨论】:
标签: java algorithm search jar performance
Java 在 jar 的内部目录结构中查找完全限定名称的完全匹配。它看起来;它不搜索。如果类路径上有 500 个 jar 文件,Java 将按照指定的顺序一个一个地查找它们,直到找到匹配项。如果包含给定类的 jar 是最后一个,Java 将在 500 个 jar 文件中查找。所以我猜是 O(n)。
更新:上述行为是默认行为。然而,正如 Hassan 所指出的,这可以通过在根 jar 文件中提供 JarIndex 来优化,从而允许类加载器通过对包名的简单查找来找到正确的 jar 文件。
【讨论】:
默认是线性的;但是,由于JDK 1.3,JAR 索引可以嵌入到应用程序的第一个 JAR 文件中。
这意味着如果索引嵌入到 JAR 文件中,类加载器可以有效地找到分布在属于应用程序的多个 JAR 文件中的所有类。
链接到 JAR 索引上的 SUN Resource。注意:似乎没有涵盖非类资源。
【讨论】: