双亲委派机制
从Java虚拟机的角度来看,只有两种不同的类加载器:其中一种是由C/C++编写的启动类加载器;另外一种是由java编写的其他类加载器。如果从Java程序的角度出发,可以分为上图所示的类加载器模型。现在简要介绍一下双亲委派机制:
启动类加载器:这个类加载器主要是加载存放在<JAVA_HOME>\lib目录,或者是被-Xbootclasspath参数所指定路径下,而写是java虚拟机能够识别的类库加载到虚拟机的内存中。
扩展类加载器:这个类加载器是在类sun.misc.Launcher$ExtClassLoader中以Java代码实现的,它负责加载<JAVA_HOME>\lib\ext目录中,或者被java.ext.dirs系统变量所指定的类库。
应用程序类加载器:这个类加载器是在类sun.misc.Launcher$AppClassLoader中以java代码实现的,它负责加载用户类路径上所有的类库。
双亲委派机制的工作过程是:当类加载器收到了类加载的请求时,它首先不会去自己加载这个类,而是将这个类委派给父加载器去完成,每一层的加载器都是如此。所以说每次类的加载,都会传送到顶层的启动类加载器。当父加载器反馈自己的无法加载此类时,才会由自己去完成加载。
双亲委派机制中,除了启动类加载器之外,所有的类加载器都有自己的父加载器。利用双亲委派机制的好处就是Java中的类的加载随着类加载器而具备一定的层级关系,不会造成混乱。例如java.lang.Object,它存在与rt.jar中,它最终都是委派给最顶层的类启动加载器完成加载的,所以在程序的类加载器环境中都能保证是同一个类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了