1、双亲委派机制
1、概述:Java虚拟机对class文件采用的是按需就在的方式,即当需要使用该类时才会将其对应的class文件加载到内存中生成class对象,加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理,它是一种任务委派模式。
2、工作原理:
1、如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;
2、如果父类加载器还存在其父类加载器,则继续向上委托,最终到达顶层的启动类加载器;
3、如果父类加载器可以完成加载,就成功返回;若父类加载器无法完成此项任务,子类加载器会尝试自己去加载;
3、优势
1、避免类的重复加载
2、保护程序安全,防止核心API被随意篡改
2、沙箱安全机制
1、概述:手动创建java.lang包,在包下创建String类,但在实际运行时并不会加载该类,在加载自定义String类的时候会首先使用引导类加载器,引导类加载器在加载过程中会首先加载jdk自带的文件,即rt.jar包中的String.class,这种机制就是沙箱安全机制。
2、优点:可以保证对java核心源码的保护。
3、其他
1、JVM判断两个class对象是否为同一个类存在的两个必要条件:
1、类的完整类名必须一致
2、加载这个类的ClassLoader(ClassLoader实例对象)必须相同
2、对类加载器的引用
1、JVM必须知道一个类型是由启动类加载器加载的还是用户类加载器加载的。如果一个类型是由用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区中,当解析到一个类型到另一个类型时,JVM需要保证这两个类加载器是相同的
2、Java程序对类的使用方式:
1、Java对类的使用方式分为:主动使用和被动使用
2、区别:被动使用时,不会导致类的初始化(类的加载过程中的初始化)
3、主动使用的情况:创建实例、访问类或接口的静态变量、调用类的静态方法、反射、初始化一个类的子类,java虚拟机启动时被标注为启动的类等等
