类加载器体系架构和工作原理
类加载器有三种分别是:
启动类加载器(Bootstrap ClassLoader):是java虚拟机jvm识别,java程序无法直接使用;
扩展类加载器(Extension ClassLoader):开发者可以直接使用扩展类加载器
应用程序类加载器(Application ClassLoader):一般情况下这个就是程序中默认的类加载器。
应用程序都是由这3种类加载器互相配合进行加载的
启动类加载器(Bootstrap ClassLoader)<-- 扩展类加载器(Extension ClassLoader)<-- 应用程序类加载器(Application ClassLoader)<-- 自定义类加载器(User Classloader)
工作原理:双亲委派模型
双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器,一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,
只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载
这种模式的好处是:无论哪一个类加载器要加载这个类(如java.lang.Object,它存放在rt.jar之中),最终都是委派给顶层类加载器加载,因此在各个类加载器环境加载的都是同一个类,如果不使用双亲委派模型,会出现多个不同的类
在JVM中表示两个class对象是否为同一个类对象存在两个必要条件:
其一:类的完整类名必须一致,包括包名。
其二:加载这个类的ClassLoader(指ClassLoader实例对象)必须相同。
即:不重写loadClass方法,不同的类加载器加载加载同一个类时,将生成一个实例;
相反,自定义的类加载器重写了loadClass方法,就算加载的是同一个类,也将生成不同的实例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具