java的双亲委派机制

简介: java的双亲委派机制

Java的双亲委派机制是一种类加载器间的协作模式,用于确保Java应用程序中类的唯一性、安全性和正确性。这种机制规定了类加载器在加载某个类时的行为规范,其核心思想是:当一个类加载器接收到类加载请求时,首先将加载任务委托给其父类加载器去完成;只有当父类加载器无法完成加载(如找不到对应类)时,子类加载器才尝试自己去加载。

1.具体运作过程:

  • 类加载请求:当程序首次使用某个类时,如果该类尚未被加载到JVM中,那么会触发类加载请求。

  • 初始委派:当前接到加载请求的类加载器(称为“发起加载器”)首先将加载任务委托给其上级(父)类加载器。这种委托关系一直延续到最顶层的类加载器,通常是Bootstrap ClassLoader(引导类加载器)。Bootstrap ClassLoader负责加载Java核心库(如rt.jar),它没有父加载器。

  • 父加载器尝试加载:从最顶层的类加载器开始,按照层次逐级向下尝试加载类。每个父加载器在接收到请求后,会检查是否已经加载过该类,如果有则直接返回已加载的类;否则,尝试从其定义的类搜索路径(如CLASSPATH、-Xbootclasspath指定的路径等)中查找并加载类的字节码文件。

  • 子加载器加载:如果所有父加载器均无法完成加载(即未找到对应类或拒绝加载),则最初的发起加载器(即子类加载器)开始尝试自己加载类。它会在其定义的类搜索路径中查找并加载类的字节码文件。

  • 加载成功与缓存:无论在哪一级加载器成功加载了类,都会将加载结果记录在内部缓存中,以便后续请求可以直接返回,避免重复加载。同时,该类会被关联到加载它的类加载器实例,确保类的唯一性。

  • 加载失败处理:如果所有加载器都无法成功加载类,将会抛出ClassNotFoundException。

2.双亲委派机制带来的好处包括:

  • 防止类重复加载:由于类加载请求总是先向上委托,所以父加载器已经加载过的类,其子加载器就不会再尝试加载,确保了类的全局唯一性。

  • 保障核心类库安全:系统类库由引导类加载器加载,由于其没有父加载器,因此用户自定义类加载器无法加载覆盖核心类库中的类,防止恶意代码篡改或替换核心类库。

  • 实现类加载器隔离:不同类加载器加载的类互相不可见,除非显式允许。这种隔离机制有利于实现模块化、插件化系统,每个模块或插件有自己的类加载器,它们之间互不影响。

  • 提供统一的类加载入口:通过委派机制,所有类的加载请求最终都会到达顶层的引导类加载器,保证了对系统类库加载的统一控制。

目录
相关文章
|
11天前
|
Java 数据库连接 开发者
Java的Shutdown Hook机制:优雅地关闭应用程序
Java的Shutdown Hook机制:优雅地关闭应用程序
25 1
|
11天前
|
Java 程序员 开发者
深入理解Java并发编程:线程同步与锁机制
【4月更文挑战第30天】 在多线程的世界中,确保数据的一致性和线程间的有效通信是至关重要的。本文将深入探讨Java并发编程中的核心概念——线程同步与锁机制。我们将从基本的synchronized关键字开始,逐步过渡到更复杂的ReentrantLock类,并探讨它们如何帮助我们在多线程环境中保持数据完整性和避免常见的并发问题。文章还将通过示例代码,展示这些同步工具在实际开发中的应用,帮助读者构建对Java并发编程深层次的理解。
|
10天前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试
|
2天前
|
Java 程序员 编译器
JAVA异常处理机制与最佳实践
Java异常处理机制包括`Error`和`Exception`两类,其中`Exception`分为`RuntimeException`和`Checked Exception`。常用结构为`try-catch-finally`,用于捕获和处理异常。最佳实践建议精确捕获异常、避免空catch块、使用finally释放资源、合理定制异常及分离异常处理与业务逻辑。通过这些方法,可以提升程序的健壮性和可维护性。
|
2天前
|
安全 Java 测试技术
JAVA反射机制与应用
Java反射机制是核心Class类为基础,允许程序在运行时检查和操作类的结构及行为。它涉及获取Class对象以获取类信息、创建对象、调用方法和访问/修改字段。反射常用于框架设计、单元测试、插件、序列化、注解处理和动态代理,但也需要注意性能开销、安全问题和代码可读性。
|
2天前
|
存储 安全 Java
cookie机制 + java 案例
cookie机制 + java 案例
7 0
|
3天前
|
XML Java 数据库连接
Java反射机制
Java反射机制
9 1
|
3天前
|
Java UED
Java中的事件处理机制
Java中的事件处理机制
18 1
|
9天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
11天前
|
消息中间件 安全 前端开发
字节面试:说说Java中的锁机制?
Java 中的锁(Locking)机制主要是为了解决多线程环境下,对共享资源并发访问时的同步和互斥控制,以确保共享资源的安全访问。 锁的作用主要体现在以下几个方面: 1. **互斥访问**:确保在任何时刻,只有一个线程能够访问特定的资源或执行特定的代码段。这防止了多个线程同时修改同一资源导致的数据不一致问题。 2. **内存可见性**:通过锁的获取和释放,可以确保在锁保护的代码块中对共享变量的修改对其他线程可见。这是因为 Java 内存模型(JMM)规定,对锁的释放会把修改过的共享变量从线程的工作内存刷新到主内存中,而获取锁时会从主内存中读取最新的共享变量值。 3. **保证原子性**:锁
25 1