【问题标题】:Does system classloader load all classes in classpath even if they're not actually used?系统类加载器是否会加载类路径中的所有类,即使它们实际上并未使用?
【发布时间】:2011-06-07 21:55:21
【问题描述】:

我正在使用 JDK 1.6 来运行一个小型应用程序。但是我设置了一个非常庞大的类路径,其中包含很多类。

当我运行应用程序时,是否会加载类加载器中的所有类,即使它们实际上并未在我的应用程序中使用?如果不是,如何强制类加载器这样做,如果是,如何避免?谢谢!

例如,我正在使用 ant 1.7 来运行我的应用程序。

最好的问候, 罗伯特·吉

【问题讨论】:

  • 如果不是,如何强制类加载器这样做 - 为什么?
  • 您可能会看到类路径上的所有 zip/jar 文件都被打开和读取的目录,这并不是特别有效。

标签: java classpath classloader


【解决方案1】:

不,ClassLoader 会在内存中需要该类时加载该类。它不会一次加载所有类,因为它可能会耗尽内存。

【讨论】:

    【解决方案2】:

    它们会在需要时加载。但是“何时需要”的含义可能取决于类加载器。通常,当一个类被加载时,它还会检查它引用的所有类是否存在 - 它也可能会加载它们。

    您可以通过将选项 -verbose 添加到您的 Java JVM 来检查它,它会输出它加载的所有类以及从何处加载。

    【讨论】:

      【解决方案3】:

      据我所知,如果没有显式访问所有类,就不可能加载它们。只有在第一次访问它的构造函数或任何其他静态成员时才加载类,此规则也适用于嵌套类。

      【讨论】:

      • 在类路径中加载所有类并非不可能。我赞成,但你应该更正那句话。如果你愿意,你可以在你的类路径中加载所有的类,没有什么能阻止你。
      猜你喜欢
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      相关资源
      最近更新 更多