Java类加载过程与类加载器

目录
  1. ✔java类加载的过程
  2. ✔类加载器
    1. ✔双亲委派模型

java类加载的过程

image

  • 加载:java虚拟机加载二进制字节码流,产生的class对象存放在方法区中。
  • 验证:是否符合java虚拟机规范,主要验证:文件格式验证,元数据验证,字节码验证,符号引用验证。
  • 准备:将class对象的类变量(static修饰的基本类型(int,short,boolean等))赋值为零值(0,0,false),静态引用不在这个阶段赋值,在初始化阶段赋值(静态引用的对象在堆上面),如果是静态常量则赋值为ConstantValue(常量的值)
  • 解析:符号引用(符号标识)替换成直接引用(内存指向,指向目标的值)。
  • 初始化:执行类构造器()方法的过程:静态变量赋值动作和静态语句块(static{})的动作
  • 使用:实例化对象,方法调用等
  • 卸载:JVM回收类对象

类加载都是在运行时进行的,java反射机制其实就是用到类加载的过程。

类加载器

JVM里面一共有下面这几种类加载器:Boostrap ClassLoader(C++写的ClassLoader,加载JAVA_HOME/lib的类),Extention ClassLoader(加载jre\lib\ext下面的类),Application ClassLoader(用户自己定义的类)以及用户自己定义的ClassLoader. image

双亲委派模型

  • 类的唯一性是有类本身和类的类加载器确定的
  • 类加载的时候,都会尝试交给顶层的类加载器去加载,如果加载不了才会丢给下层的类加载器加载
jvm