假设我启动了Web服务器(或任何其他java进程),所有类(类似于类定义的元数据)都将在服务器/进程启动时加载 它们是在系统中的任何地方使用的,还是在运行时加载的,即仅在创建对象或遇到import语句时才会加载?
这个问题适用于jdk 8和jdk 6
答案 0 :(得分:0)
首先,在字节码中,没有 import 语句。字节码只是在所有地方使用完全限定名称。
然后,大多数JVM的默认行为是对类进行“延迟”加载。含义:当您加载A类时,JVM将仅加载运行A的所有静态初始化程序所需的类。
所以,如果A“使用”B和C;然后只有在JVM执行需要B resp的代码时才加载B,C。 C要加载。
在编写自己的类加载器时,您当然可以采取不同的方式。
答案 1 :(得分:0)
以下是您问题的相关背景
ClassLoader的架构是为了在启动时JVM不需要 了解将在运行时加载的类的任何信息。
最初,当JVM启动时,不会加载任何内容。班级 首先加载正在执行的程序的文件,然后加载其他文件 类和接口在它们被引用时被加载 字节码正在执行。
答案 2 :(得分:0)
JVM会延迟加载类。 意味着类是直接或间接需要加载的。