双亲委派机制
1.类加载器子系统(Class Loader)
1.1 class loader中类的加载过程分为三个阶段
- 加载阶段
引导类加载器(BootstrapClassLoader):主要负责加载核心的类库(java.lang.*等),构造 ExtClassLoader和APPClassLoader。
扩展类记载器(ExtClassLoader):主要负责加载jre/lib/ext目录下的一些扩展的jar。
系统类加载器(AppClassLoader):主要负责加载应用程序的主函数类
- 链接阶段
验证 -> 准备 -> 解析
- 初始化阶段
1.2 class loader功能
- class loader 负责从文件系统/网络中加载class文件
- class loader 只负责class文件的加载,运行由执行引擎(Execution Engine)决定
- 加载的类信息存放在 方法区
2.双亲委派模式
JVM对.class文件采用按需加载(当需要该类时才会将class文件加载到内存中生成class对象)的方式。加载时JVM采用双亲委派模式(把请求交给父类去处理,是一种任务委派模式。若父类加载器可以完成类加载任务,成功返回即可;否则,子类加载器才会尝试自己去加载)
优势:
- 避免类的重复加载,保证了类的唯一性
- 保证类加载的顺序和依赖关系。由于子类加载器会优先委派给父类加载器,所以父类加载器加载的类可以被子类加载器所使用,而子类加载器加载的类却无法被父类加载器所使用。这样可以保证类加载的顺序和依赖关系的正确性。
- 保护程序安全,防止核心API被随意篡改
双亲委派机制是一种层次化的类加载机制,通过委派的方式来加载类,保证了类的唯一性和加载顺序的正确性。