何时由JVM加载类?

时间:2016-09-21 04:47:16

标签: java memory-management jvm classloader

假设我启动了Web服务器(或任何其他java进程),所有类(类似于类定义的元数据)都将在服务器/进程启动时加载 它们是在系统中的任何地方使用的,还是在运行时加载的,即仅在创建对象或遇到import语句时才会加载?

这个问题适用于jdk 8和jdk 6

3 个答案:

答案 0 :(得分:0)

首先,在字节码中,没有 import 语句。字节码只是在所有地方使用完全限定名称。

然后,大多数JVM的默认行为是对类进行“延迟”加载。含义:当您加载A类时,JVM将仅加载运行A的所有静态初始化程序所需的类。

所以,如果A“使用”B和C;然后只有在JVM执行需要B resp的代码时才加载B,C。 C要加载。

在编写自己的类加载器时,您当然可以采取不同的方式。

答案 1 :(得分:0)

请参阅Class loading architecture

以下是您问题的相关背景

  

ClassLoader的架构是为了在启动时JVM不需要   了解将在运行时加载的类的任何信息。

     

最初,当JVM启动时,不会加载任何内容。班级   首先加载正在执行的程序的文件,然后加载其他文件   类和接口在它们被引用时被加载   字节码正在执行。

答案 2 :(得分:0)

  

JVM会延迟加载类。   意味着类是直接或间接需要加载的。