JVM双亲委派机制原理

JVM的双亲委派机制是Java类加载器的一个核心特性,它主要解决了类加载过程中类由谁来加载的问题。以下是双亲委派机制的工作原理和它存在的原因:

工作原理

  1. 层次结构:Java类加载器被组织成一个层次结构,通常包括三个层次:启动类加载器(Bootstrap Class Loader)、扩展类加载器(Extension Class Loader)和应用程序类加载器(Application Class Loader)。这些加载器之间存在父子关系,构成了一颗树状结构。

  2. 加载类请求:当程序需要加载一个类时,当前类加载器首先会检查自己是否已经加载过这个类。如果已加载,它会返回该类的引用。

  3. 委派给父加载器:如果当前类加载器没有加载过这个类,它会将加载请求委派给其父加载器。

  4. 自上而下的委派:当一个类加载器接收到类加载请求时,它不会立即去尝试加载这个类,而是先将请求委派给它的父类加载器,一直递归到最顶层的根加载器(Bootstrap ClassLoader)。如果父加载器能够找到这个类,就会由父加载器进行加载;否则,当前加载器才会尝试自己加载。

  5. 避免重复加载:通过这种委派方式,确保了Java类的加载过程是自上而下的,并且优先由高层次的加载器加载,避免了多个类加载器重复加载相同的类。

存在的原因

  1. 避免类的重复加载:双亲委派机制确保了Java类只会由同一个类加载器加载一次,避免了重复加载。比如核心类库中的java.lang.String类,在JVM中应该是唯一的。

  2. 安全性:防止开发者自定义加载的类替代Java核心类库。例如,防止用户自定义一个java.lang.Object类。如果没有双亲委派机制,开发者可以通过自定义类加载器加载这样的类,从而导致系统的不稳定和潜在的安全隐患。

  3. 维护类的唯一性和一致性:双亲委派模型确保了类的唯一性,因为一个类只会被加载一次。这有助于维持类加载的一致性,确保在不同的类加载器层次结构中使用的类是同一个版本,避免了类冲突。

通过这种机制,JVM确保了Java程序的稳定性和安全性,同时也支持了类的唯一性和一致性。

相关推荐
考虑考虑7 小时前
JDK26中的Map.ofLazy
java·后端·java ee
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源