Loading

简单理解类加载器的基本过程和作用

类加载的大致过程

编写.java文件,该文件存储的程序需要执行的逻辑内容,将.java经过Java编译器编译之后生成对应的.class后缀文件,class文件是.java文件经过转换之后的JVM虚拟机指令,当需要加载某个类的时候,JVM虚拟机会将对应的class文件加载,并创建对应的class对象,将class文件加载到JVM虚拟机的内存中,这个过程就是类加载。类加载器的任务就是读取一个类的二进制流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例

类加载的详细过程

第一步 加载

查找一个类的class文件,创建一个class对象

第二步 验证

验证Class文件的字节流信息是否符合JVM虚拟机要求,不会危害JVM虚拟机,主要包括四种验证,即文件格式验证、元数据验证、字节码验证、符号引用验证。

第三步 准备

为类变量(static修饰的变量)分配内存,并设置,该类变量的初始值为0(static int i = 5,这里只会将i初始化为0),值5将在初始化时赋值)当然不包括final修饰的static,因为final在编译的时候就会分配,不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到Java堆中

第四步 解析

将常量池中的符号引用替换成直接引用。符号引用就是用一组符号来描述目标,而直接引用就是直接指向目标的指针、相对偏移量或者间接定位目标的句柄。

第五步 初始化

类加载最后阶段,若类具有超类,则对其进行初始化,执行静态初始化器和静态初始化成员变量

posted @ 2023-02-15 00:30  Hel10  阅读(79)  评论(0编辑  收藏  举报