Java类加载过程与类加载器
✔java类加载的过程
- 加载: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.
✔双亲委派模型
- 类的唯一性是有类本身和类的类加载器确定的
- 类加载的时候,都会尝试交给顶层的类加载器去加载,如果加载不了才会丢给下层的类加载器加载