【jvm】双亲委派机制

目录

          • [1. 说明](#1. 说明)
          • [2. 类加载器层次结构](#2. 类加载器层次结构)
          • [3. 工作原理](#3. 工作原理)
          • [4. 主要作用](#4. 主要作用)
          • [5. 局限性](#5. 局限性)
          • [6. 破坏双亲委派机制](#6. 破坏双亲委派机制)
1. 说明
  • 1.双亲委派机制(Parent Delegation Model)是Java类加载器的一种工作模式,它确保了类加载的一致性和安全性。
  • 2.双亲委派机制的基本思想是:当一个类加载器试图加载某个类时,它会先委托给其父类加载器,如果父类加载器无法加载,再由当前类加载器自己进行加载。
  • 3.这种层层委派的方式有助于保障类的唯一性,避免类的重复加载,并提高系统的安全性和稳定性。
2. 类加载器层次结构
  • 1.启动类加载器(Bootstrap Class Loader):负责加载Java的核心库,如java.lang.*等。它是最顶层的类加载器,通常由C++编写,不存在父类加载器。
  • 2.扩展类加载器(Extension Class Loader):负责加载Java的扩展库,一般位于<JAVA_HOME>/lib/ext目录下。它的父类加载器是启动类加载器(在实际逻辑中)。
  • 3.应用程序类加载器(Application Class Loader):也称为系统类加载器,负责加载应用程序类路径上指定的类库。它的父类加载器是扩展类加载器。
3. 工作原理
  • 1.检查缓存:类加载器首先检查是否已经加载过该类,如果已经加载过,则直接返回该类。
  • 2.委派父加载器:如果没有加载过该类,类加载器将加载请求委派给父类加载器。
  • 3.递归过程:父类加载器也按照相同的过程处理加载请求,直到委派到启动类加载器。
  • 4.启动类加载器加载:启动类加载器尝试加载类,如果加载成功,则返回该类。
  • 5.逐级回退:如果启动类加载器无法加载该类,加载请求逐级回退到下一级类加载器,直至回退到最初的请求者。
  • 6.自行加载:最终,如果所有父类加载器都无法加载该类,子类加载器才会尝试自行加载。
4. 主要作用
  • 1.保证类加载的安全性:由于双亲委派机制中,顶层的类加载器(如Bootstrap ClassLoader)负责加载核心类库,这种设计可以避免恶意代码替换核心类库,从而确保核心类库的完整性和安全性。
  • 2.避免重复加载:通过双亲委派机制,如果一个类已经被一个类加载器加载过,那么其他的类加载器就无需再次尝试加载,这样可以避免同一个类被多次加载的情况,节省内存并提高性能。
  • 3.保证类的一致性:双亲委派机制确保了同一个类在整个Java应用中只有一个唯一的定义,避免了同名类不同实现的冲突问题。
5. 局限性
  • 1.灵活性不足:双亲委派机制的严格层级关系使得子类加载器很难绕过父类加载器直接加载类,这在某些情况下限制了灵活性。
  • 2.复杂性:实现自定义类加载器时,需要理解和实现双亲委派机制,这增加了开发的复杂性。
6. 破坏双亲委派机制
  • 1.在某些特定需求下,可能需要破坏双亲委派机制,如加载自定义的类或版本不同的类库。
  • 2.这通常通过继承ClassLoader并覆盖loadClass方法或findClass方法来实现。
  • 3.破坏双亲委派机制可能会带来安全风险,因此需要谨慎操作。
相关推荐
掘金-我是哪吒11 小时前
分布式微服务系统架构第102集:JVM调优支撑高并发、低延迟、高稳定性场景
jvm·分布式·微服务·架构·系统架构
BenBen尔12 小时前
spark的堆外内存,是在jvm内还是操作系统内存内?
大数据·jvm·hadoop·spark
程序猿chen15 小时前
JVM考古现场(十九):量子封神·用鸿蒙编译器重铸天道法则
java·jvm·git·后端·程序人生·java-ee·restful
服务端相声演员1 天前
JVM不同环境不同参数配置文件覆盖
jvm
寒9922 天前
Java中equals与 “==” 的区别
java·开发语言·jvm
2401_835261382 天前
多线程(Java)
java·开发语言·jvm
我命由我123452 天前
35.Java线程池(线程池概述、线程池的架构、线程池的种类与创建、线程池的底层原理、线程池的工作流程、线程池的拒绝策略、自定义线程池)
java·服务器·开发语言·jvm·后端·架构·java-ee
Johnny Lnex3 天前
JVM之String创建、拼接
jvm
s_yellowfish3 天前
JAVA虚拟机(JVM)学习
java·jvm·学习
程序猿chen3 天前
《JVM考古现场(十八):造化玉碟·用字节码重写因果律的九种方法》
java·jvm·git·后端·面试·java-ee·跳槽