影响

2012-06-11 77 views
8

我约可找出未使用 JAR文件的工具,比如在这里看了这么多Q &答:影响

  1. loosejar
  2. Classpath Helper

我的问题是,在编译时或运行时,类路径中是否存在未使用JAR的影响(如将类加载到内存,性能等)?问题适用于作为独立程序和Web服务器(Apache Tomcat)运行,尽管我最初只考虑过独立程序。

注意:我正在运行JDK 6u32(64位)。

回答

8

是否有类路径在编译时或运行时具有未使用的JAR的任何影响(如类装载到存储器中,性能等)?

这会有一个小的影响。当类加载器(或编译器的等价物)启动时,它必须读取每个JAR文件的索引以找出每个JAR中的类。如果在类路径中有不必要的JAR,则类加载器需要做更多工作,并且(至少暂时)会使用更多内存来缓存索引。

这适用于各种Java应用程序。

您没有问的问题是影响是否显着。答案是“一般不会”......但是在班级路径上的“无用的东西”越多,影响就越大。

+0

因此,*小的影响*适用于编译时和运行时? – Gnanam

+0

是的......在这两种情况下。在这两种情况下通常都不值得担心。 –

0

是的,它有影响 - 因为JVM在CLASSPATH的JAR中查找必要的类。保留密封的JAR也是有意义的,以告诉JVM不要在其他JAR中查找相关的类。

P.S .: javac也是一个java程序,用于记录。

+0

然而,JAR文件索引的缓存意味着在额外的地方查找的开销很小。 –

3

主要问题不在于性能,因为成本相对较小,仅适用于加载新类。主要问题是可维护性。例如,当一个库需要升级时,你可能会浪费大量的时间来测试应用程序,但仍然可以与新版本一起工作,只是为了发现该库没有被使用。 (假设你有一个新的库,它需要一个你已经使用过的库的更新版本)

+0

我无法清楚地理解这一点 - “当图书馆需要升级时,您可能会浪费大量时间来测试应用程序仍然适用于新版本,只会发现图书馆未被使用。你能澄清一下吗? – Gnanam

+1

假设你有log4j版本1.1,但你想使用库X因为某些原因需要log4j1.2。您不能直接在版本1.2中下载,直到您确定它不会破坏您的应用程序。所以你使用1.2重新测试你的应用程序,看看它是否仍然有效并浪费大量时间,因为你甚至不使用log4j。如果你只有实际使用的库,这不会是一个问题。 –