Java 类路径中存在未使用JAR文件的影响

Java 类路径中存在未使用JAR文件的影响,java,performance,jar,classpath,Java,Performance,Jar,Classpath,我在这里读了很多关于查找未使用JAR的工具的问答,例如: 我这里的问题是,在编译时或运行时,在类路径中使用未使用的jar是否会产生任何影响(例如将类装入内存、性能等)?这个问题既适用于作为独立程序运行,也适用于Web服务器(ApacheTomcat),尽管我最初只考虑独立程序 注意:我正在运行JDK 6u32(64位)。是的,它有影响-因为JVM在类路径的JAR中查找必要的类。保持密封的jar也是有意义的,告诉JVM不要在其他jar中查找相关类 另外,javac也是一个java程序,请注意

我在这里读了很多关于查找未使用JAR的工具的问答,例如:

  • 我这里的问题是,在编译时或运行时,在类路径中使用未使用的jar是否会产生任何影响(例如将类装入内存、性能等)?这个问题既适用于作为独立程序运行,也适用于Web服务器(ApacheTomcat),尽管我最初只考虑独立程序


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

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

    另外,javac也是一个java程序,请注意

    在编译时或运行时,类路径中存在未使用的JAR是否会产生任何影响(例如将类装入内存、性能等)

    将会有一个小的影响。当类装入器(或编译器的等效程序)启动时,它必须读取每个JAR文件的索引,以找出每个JAR中有哪些类。如果类路径上有不必要的jar,那么类加载器还有更多的工作要做,并且将(至少暂时)使用更多的内存来缓存索引

    这适用于所有类型的Java应用程序


    你没有问的问题是影响是否重大。答案是“一般不会”。。。但是类路径上“无用的东西”越多,影响就越大。

    主要问题不在于性能,因为成本相对较小,而且仅在加载新类时。主要问题是可维护性。例如,当一个库需要升级时,您可能会浪费大量时间测试应用程序在新版本下仍然可以正常工作,但却发现该库未被使用。(假设您有一个新的库,它需要一个您已经“使用”的库的更新版本)

    我不能清楚地理解这一点--
    当库需要升级时,您可能会浪费大量时间测试应用程序在新版本下仍能正常工作,但却发现该库未被使用
    。你能澄清一下吗?假设你有log4j版本1.1,但是你想使用X库,因为某些原因它需要log4j 1.2。在确定1.2版不会破坏应用程序之前,您不能直接使用1.2版。因此,您使用1.2重新测试您的应用程序,看看它是否仍然有效,并浪费大量时间,因为您甚至没有使用log4j。如果您只有实际使用的库,这不会是一个问题。因此,小影响在编译时和运行时都适用?是的。。。在这两种情况下。但是,JAR文件索引的缓存意味着查找额外位置的开销是最小的。