面试题:什么是 Java 中的双亲委派模型?

在Java中,双亲委派模型(Parent Delegation Model)是类加载器的一种工作模式。它确保了Java应用程序中的类加载过程既安全又高效。通过这种机制,Java虚拟机(JVM)能够有效地管理不同来源的类,并保证核心Java库的安全性。

双亲委派模型的工作原理

  1. 当一个类加载器收到加载某个类或接口的请求时,它首先不会自行尝试加载这个类,而是把这个请求委派给它的父类加载器去完成。
  2. 父类加载器接到请求后,同样会采用相同的方式处理:继续向上委派,直到启动类加载器(Bootstrap Class Loader)。这是最顶层的类加载器,负责加载JRE的核心类库,如java.lang.*java.util.*等基础包。
  3. 如果父类加载器无法加载目标类(即在父类加载器的搜索范围内找不到该类),子类加载器才会尝试自己去加载这个类。
  4. 若最终所有的类加载器都无法找到指定的类,则会抛出ClassNotFoundException异常。

类加载器层次结构

  • Bootstrap Class Loader:这是最顶层的类加载器,用来加载核心Java库(位于$JAVA_HOME/jre/lib目录下),它是用本地代码实现的,不属于Java平台的标准部分,因此没有对应的Java对象。
  • Extension Class Loader:负责加载Java的扩展类库,默认情况下会加载位于$JAVA_HOME/jre/lib/ext目录下的JAR文件。
  • Application Class Loader:也称为系统类加载器,负责加载应用的类路径(classpath)上指定的所有类和包。

双亲委派模型的优势

  • 避免重复加载:同一类只要被一个类加载器加载过,其他类加载器就会直接使用已加载的版本,避免了不必要的重复加载。
  • 安全性保障:由于核心Java类总是由最顶层的类加载器加载,这可以防止用户自定义的类冒充核心类(例如java.lang.String),从而增强了系统的安全性。
  • 统一性维护:确保了不同类加载器加载的同一个类在JVM中被视为同一个类,这对于保持程序的一致性和正确性至关重要。

总的来说,双亲委派模型是Java类加载机制的重要组成部分,对于维护Java应用程序的稳定性和安全性具有重要意义。理解这一模型有助于更好地解决类加载相关的复杂问题。

THE END
喜欢就支持一下吧
点赞5 分享