java字节码文件从class文件到内存中的类,按照先后顺序需要经过加载、链接、初始化三个过程。
1.加载:jvm借助 类加载器 查找字节流并创建类的过程
类加载器除启动类加载器之外,其他的类加载器都是 java.lang.ClassLoader 的子类。这些类加载器需要先由另一个类加载器加载至 Java 虚拟机中,方能执行该类的类加载。
类加载器采用双亲委派机制,即当一个类加载器接收到加载请求时,会先将请求转发给父类加载器,在父类加载器没有找到所请求类的情况下,该类加载器才会尝试去加载。
2.链接:将创建的类合并至jvm中并使之可执行的过程
分为三个阶段:
1. 验证:确保被加载的类符合jvm的约束条件
2. 准备:为被加载类的静态字段分配内存
3. 解析:将符号引用解析为实际引用
3.初始化:为标记为常量值的字段赋值,以及执行 < clinit > 方法的过程
jvm通过加锁机制确保类的初始化仅会被执行一次,这个特性被用来实现单例的延迟初始化。
本文详细阐述了Java类从class文件到内存中的类的生命周期过程,包括加载、链接(验证、准备、解析)和初始化。讲解了类加载器的工作原理,特别是双亲委派机制,以及链接阶段的各个子步骤。此外,还提及了初始化阶段的特性,如单例的延迟初始化。
4292

被折叠的 条评论
为什么被折叠?



