Java虚拟机面试题, 什么是 Java 中的双亲委派模型?
Java虚拟机面试题, 什么是 Java 中的双亲委派模型?
QA
Step 1
Q:: 什么是Java中的双亲委派模型?
A:: 双亲委派模型是Java类加载机制的一种实现方式。该模型要求类加载器在加载一个类之前,首先将加载请求委派给它的父类加载器。如果父类加载器无法加载这个类,才会尝试由自己来加载。这个模型的好处在于它能够有效避免类的重复加载,确保Java核心类库的安全性和稳定性,防止核心类库被自定义类所篡改。
Step 2
Q:: 为什么双亲委派模型能够提高系统的安全性?
A:: 双亲委派模型之所以能够提高系统的安全性,是因为它确保了Java的核心类库只能由根类加载器(即Bootstrap ClassLoader)加载。这意味着即使应用程序中有自定义类名与核心类库的类名相同,应用程序也无法篡改或替换核心类库中的类,实现了类加载过程的隔离与安全保护。
Step 3
Q:: 双亲委派模型的工作流程是怎样的?
A:: 当一个类加载器收到一个加载类的请求时,它首先将这个请求委派给它的父类加载器处理,父类加载器依次向上委派,直到委派给最顶层的根类加载器。如果根类加载器能加载这个类,则加载成功;如果不能,则沿着原路径依次返回给下层的类加载器尝试加载,直到最终由请求的类加载器加载或者抛出ClassNotFoundException异常。
Step 4
Q:: 双亲委派模型在什么情况下会被打破?
A:: 双亲委派模型在某些特定情况下可能会被打破,例如使用自定义类加载器加载类时可以不遵循双亲委派原则。另外,某些框架(如OSGi)为了实现动态模块化加载,也会打破双亲委派模型的限制,通过自定义类加载器机制来控制类加载过程。
Step 5
Q:: 什么是类加载器?Java中的类加载器有哪些?
A:: 类加载器是Java虚拟机的一部分,负责将字节码文件加载到Java虚拟机中。Java中主要有以下几种类加载器:1. Bootstrap ClassLoader(启动类加载器):负责加载Java核心类库。2. Extension ClassLoader(扩展类加载器):负责加载扩展库中的类。3. Application ClassLoader(应用类加载器):负责加载应用程序类路径(CLASSPATH)下的类。4.
自定义类加载器:开发者可以根据需要定义自己的类加载器。
Step 6
Q:: 双亲委派模型的优缺点分别是什么?
A:: 双亲委派模型的优点在于其简化了类加载流程,确保核心类库的安全性和系统稳定性,避免类的重复加载。缺点在于它有时会限制某些高级应用的需求,例如动态加载或替换类库。因此,在某些框架中可能会被部分或完全打破。