Java 虚拟机面试题, 什么是 Java 中的双亲委派模型?
Java 虚拟机面试题, 什么是 Java 中的双亲委派模型?
QA
Step 1
Q:: 什么是 Java 中的双亲委派模型?
A:: 双亲委派模型是一种类加载机制。在 Java 中,当一个类加载器加载某个类时,它首先不会自己尝试去加载,而是将这个请求委派给它的父类加载器,每一层的加载器都是如此,最终这个请求会到达顶层的启动类加载器。如果父加载器无法加载这个类(即找不到这个类),那么子加载器才会尝试自己加载。这样做的目的是为了确保 Java 的核心类库能够由系统的顶层类加载器统一加载,防止核心类库被篡改。
Step 2
Q:: 为什么要使用双亲委派模型?
A:: 双亲委派模型的主要作用是为了安全性。通过这种模型,核心的 Java 类库由最上层的类加载器加载,防止核心类库被篡改。比如,如果自定义类加载器不采用双亲委派模型,而直接加载核心类库的某些类,可能会导致类的功能被破坏,造成系统运行异常或安全问题。
Step 3
Q:: 双亲委派模型的具体工作流程是什么?
A:: 当我们加载一个类时,类加载器会先把这个请求交给父类加载器,依次向上直到根类加载器(Bootstrap ClassLoader)。如果父类加载器能够找到并加载这个类,则直接返回类的字节码。如果父类加载器无法加载该类,子类加载器才会尝试加载。这个机制确保了 Java 核心类库由系统提供的类加载器加载,不会被篡改或替换。
Step 4
Q:: 如何打破双亲委派模型?
A:: 虽然双亲委派模型是 Java 类加载机制的基础,但在某些情况下,我们可能需要打破这个模型,比如自定义类加载器。在自定义类加载器中,可以通过覆盖 loadClass
方法来实现自己的类加载逻辑,而不调用 super.loadClass
方法,直接加载自己想要的类。这种做法需要谨慎,因为它可能会带来安全隐患。
用途
在实际生产环境中,双亲委派模型的主要作用是保证 Java 核心类库的安全性和稳定性,防止核心类库被恶意替换或篡改。在设计和开发 Java 应用程序时,如果需要使用自定义类加载器,了解双亲委派模型是必要的。这尤其重要在大型分布式系统或插件化架构中,使用自定义类加载器加载第三方类库或插件时,开发者需要明确什么时候遵循、什么时候打破双亲委派模型,以平衡安全性和灵活性。面试中考察这一知识点,主要是为了确认候选人对 Java 类加载机制的理解,以及其在复杂应用场景中的实际运用能力。\n相关问题
🦆
Java 类加载器的种类有哪些?▷
🦆
什么是自定义类加载器?▷
🦆
类加载的过程包括哪些步骤?▷
🦆
什么是类的热加载与卸载?▷