load class文件,双亲模型流程,类加载器的简介
load class文件过程
1.(javac等命令或者操作)本地磁盘生成class文件;
2.Loading—jvm将class文件装载到内存中;
3.Linking(包含三个部分:verification-检验class文件格式是否正确,如前四位是否为魔法数(CA FE BA BE)、preparation-静态变量赋默认值(如int类型默认值是0)、resolution-将常量池中的符号引用转为内存地址中的直接引用)
4.Initializing—静态变量赋初始值。
双亲委派机制
jvm通过类加载器将类加载到内存,过程中主要使用双亲委派机制保证代码的安全性,以及正确load的内存中。
类加载器类型(jdk8):
自定义类加载器
application类加载器
extention类加载器
bootstrap类加载器
双亲委派模型流程:
JVM准备load一个class文件到内存中:
1、首先看是否由自定义类加载器,如果有,确认其是否已将加载过这个class文件,如果已加载,流程结束;如果没有加载,则进行2;
2、向上确认application类加载器是否已加载此class文件,如果已加载则流程结束;如果没有加载,则进行3;
3、向上确认extention类加载器是否已记载过此class文件,如果已加载,则流程结束;如果没有加载,则进行4;
4、向上确认bootstrap类加载器(顶级类加载器)是否加载过此class文件,如果已加载,则流程结束,如果没有加载,则进行5;
5、按照bootstrap--extention--app---自定义类加载器顺序,在对应类加载器范围内找到class文件,加载即停止整个双亲委派流程。
自定义类加载器和如何破坏双亲委派模型
自定义类加载器:
1、继承Classloader类
2、重写findClass方法,方法内部直接调用defineClass方法
破坏双亲委派模型:
1、继承ClassLoader类
2、重写loadClass方法