当前位置: 首页 > 面试题库 >

系统类加载器是否在类路径中加载所有类,即使它们实际上并未使用?

卫沈义
2023-03-14
问题内容

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

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

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

最好的问候,罗伯特·吉


问题答案:

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



 类似资料:
  • 我将Jetty(8和9)与LZ4压缩一起使用,我想使用LZ4的本机实现,它是C库的本机绑定。为了实现这一点,LZ4类应该用系统类加载器加载。 所以我的问题是,如何用Jetty中的系统类加载器加载一个外部jar。 将lib放入$jetty。home/lib/ext没有帮助,因为它是用扩展类加载器而不是系统加载器加载的。

  • 如何使用类路径加载csv文件?在此之前,我尝试使用FileReader加载文件,这在本地运行时工作正常,但是当部署到外部服务器时会引发像FileNotFound这样的异常。下面的代码在本地工作,但是当部署在tomcat文件夹www/[jar]上的jar抛出这个异常不幸的是,我无法提供原始代码。这是要点:

  • 如果我有一个内部类声明,例如: 其次是: A$B内部类也会加载吗?如果B内部类没有被声明为“静态”呢?

  • 问题内容: 我们知道我们可以使用以下方法覆盖System 类加载器: 那么,既然它本身是一个类,它是由谁加载的? 我们如何获得该“元”类加载器的类文件? 问题答案: 从Javadoc中获取: 如果在首次调用此方法时定义了系统属性“ java.system.class.loader”,则该属性的值将作为要作为系统类加载器返回的类的名称。 该类使用默认的系统类加载器加载, 并且必须定义一个公共构造函数

  • 有关详细信息,请参阅http://www.slf4j.org/codes.html#staticloggerbinder。 我检查了这个URL,它确实提供了一个解决方案:“在类路径上放置一个(且仅放置一个)slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar或logback-classic.jar应该可以解决问题。” 我的

  • 问题内容: 假设我已经使用Groovyc编译了Groovy脚本,该脚本已在文件系统中生成了一个或多个.class文件。如何从Java应用程序动态地将这些类添加到类路径中,以加载它们并调用它们的方法?目标是预编译Groovy脚本并将其存储到数据库中,以便可以从脚本的编译版本执行评估。 问题答案: 您可以创建URLClassLoader的实例以从目录加载新类: 第1 行将.class 创建到.clas