76. 双亲委派机制
发布日期:2021-05-12 23:59:42 浏览次数:18 分类:精选文章

本文共 1204 字,大约阅读时间需要 4 分钟。

类加载器与双亲委派机制

类加载器是Java虚拟机(JVM)中一个关键的组件,它负责将Java类文件加载到内存中,使得Java程序能够运行。在JVM中,类加载器主要负责解析类文件,并确保类的正确加载和初始化。

类加载器的类型

  • 虚拟机自带的加载器

    这是JVM的一部分,负责加载核心Java类库(如java.lang)和其他基础组件。

  • 启动类(根)加载器(Boot Loader)

    这是最底层的加载器,负责将JVM核心库和显式指定的类加载到内存中。

  • 扩展类加载器(Extenders Loader)

    由开发者自定义,用于加载用户定义的类文件或库文件。

  • 应用程序加载器(Application Loader)

    负责将用户应用程序类加载到内存中。通常用户通过双击类文件或调用java -jar命令来运行。


  • 双亲委派机制

    双亲委派机制是Java类加载过程中的重要机制,它确保了类加载的规范性和正确性。具体流程如下:

  • 接收请求

    当某个类加载器需要加载一个类时,它首先会接收请求。

  • 委派至父类加载器

    如果当前类加载器无法直接加载类(例如类没有被明确指定),它会将请求委派给其父类加载器,继续向上委派。

  • 委派终止

    最终请求会被发送到启动类加载器( Boot Loader)。启动类加载器负责检查JVM引向目录(Classpath)中是否有匹配的类。

  • 决定是否加载

    如果启动类加载器能够找到对应的类,它会通知父类加载器,结束委派过程并加载该类。如果无法找到匹配的类,启动类加载器会抛出ClassNotFoundException异常,并通知调用链让父类加载器尝试其他可能的加载器。

  • 重复循环

    如果父类加载器成功加载类,整个过程会重复,直到整个类加载完成。


  • 实例分析

    我们可以用一个简单的Java程序来理解类加载机制。例如:

    public class String {
    public String toString() {
    return "Hello";
    }
    public static void main(String[] args) {
    String s = new String();
    s.toString();
    }

    当程序运行时,JVM的类加载器会依次处理String类的加载。具体来说:

  • 应用程序加载器接收构造String实例的请求。
  • 应用程序加载器发现String类没有被明确指定,会将请求委派给扩展类加载器。
  • 扩展类加载器也无法找到对应的加载器,请求继续向上委派。
  • 最终请求会到达启动类加载器。启动类加载器检查JVM引向目录,发现String类并通过双亲委派机制完成加载。
  • String类成功被加载,程序可以正常执行。

  • 类加载器和双亲委派机制是JVM运作的关键部分,它们确保了类文件的正确加载和内存的有效管理。理解这些机制有助于改进Java程序的性能和稳定性。

    上一篇:77.JVM GC(垃圾回收与算法)
    下一篇:功能需求:打印当前系统时间,模拟倒计时

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月16日 23时47分13秒