AppClassLoader与SystemClassLoader是一个东西吗?

简介: 首先为什么会有这么一个问题呢?主要还是因为网上充斥着各种JAVA ClassLoader的相关文章,什么:五分钟搞懂ClassLoader、深入浅出ClassLoader、一看就懂的ClassLoader等等。

问题来源


首先为什么会有这么一个问题呢?主要还是因为网上充斥着各种JAVA ClassLoader的相关文章,什么:五分钟搞懂ClassLoader、深入浅出ClassLoader、一看就懂的ClassLoader等等。


可是,当你看的文章多了,想必就会有如题般的疑惑:AppClassLoader与SystemClassloader是一个东西吗?为什么会有这个疑惑呢,我们看看这些图:


0.png


1.png


2.png

3.png


从上面的类加载器委派关系图中我们可以看到,BootstrapClassLoader 和ExtentClassLoader是大家都有的。可是到了第三层,不同的图显示的ClassLoader却是不一样的:有的是SystemClassLoader,而有的是AppClassLoader。


那么到底正确的应该是SystemClassLoader还是AppClassLoader呢?还是说这俩其实是一个东西?又或者说不同的JDK版本,这俩是不一样的?

02问题解析


Java虚拟机规范「1」中指出,Class Loader分为Bootstrap Class Loader以及User-defined Class Loader,其中Bootstrap Class Loader是由Java虚拟机使用C++实现的,没有对应的Java对象。


4.png


所谓User-defined Class Loader,其实也没有叫这个名称的Java对象,这里是一种泛称,直译过来为用户定义的Class Loader,对应JDK中的Java对象是java.lang.ClassLoader及其子类,除此之外,JDK中还提供了sun.misc.Launcher.ExtClassLoader以及sun.misc.Launcher.AppClassLoader。


那这是不是就意味着SystemClassLoader是错误的不存在的呢?当然也不是,在Jdk9中的ClassLoader的文档「2」中明确指出:


5`.png


同时有一篇大佬的博客「3」同样有提到:


5.png


所以,综上,其实AppClassLoader与SystemClassLoader是一个东西。


所以,看过这篇文章的小伙伴,以后应该就可以摆脱相关的疑惑了。其实,有些知识,我们在想要系统学习的时候,网上的知识内容很多,可是如果稍加细致的观察,我们便能看到许多的问题,而遇到问题后,你是囫囵吞枣,含糊而过,还是打破砂锅问到底也决定了我们之后对学过知识自信程度,这点很重要。


当然,如果你比较懒,还是可以多多关注强哥,提问题留言,大家一起讨论进步哈~    


相关文章
|
2月前
|
存储 关系型数据库 MySQL
Mysql全面总结
本文全面总结了MySQL的相关知识,涵盖思维导图、架构、存储引擎、数据类型、索引、查询、事务、锁机制、调优、分区与分表分库、主从复制及其他问题。MySQL采用插件式存储引擎架构,支持多种存储引擎,如InnoDB和MyISAM,每种引擎具备不同的特性。文章详细介绍了InnoDB和MyISAM的对比,包括事务支持、行级锁定、索引类型等。此外,还探讨了MySQL的查询优化、性能调优、主从复制等内容,适合数据库开发者和运维人员阅读。如涉及版权问题,请联系作者删除。
Mysql全面总结
|
Java API Spring
史上最全AOP 切面表达式,看完逼格有提升了
史上最全AOP 切面表达式,看完逼格有提升了。源码已放开头了,请你查收。
1096 0
|
缓存 Java 数据库连接
|
存储 Oracle 安全
JDK 11 是发布了,但收费吗?
自 9 月 26 日,Oracle JDK 11 正式版本发布以来,一直被大家所看好,因为它是继 6、7、8之后,第一个长期支持的版本「见下图」,而 9 、10 估计多半会夭折了。。。
6008 0
JDK 11 是发布了,但收费吗?
|
NoSQL Linux Redis
Docker安装Redis并配置文件启动
之前已经写过Redis分别在Linux、Windows上安装部署,及其集群环境搭建。这次写一篇Docker容器部署Redis的教程,配置文件方式启动服务。
Docker安装Redis并配置文件启动
|
6月前
|
消息中间件 Java API
一文带你速通Sentinel限流规则(流控)解读
一文带你速通Sentinel限流规则(流控)解读
|
存储 安全 算法
JVM-虚拟机栈详解 ,手画详图,带你快速理解!!!
JVM-虚拟机栈详解 ,手画详图,带你快速理解!!!
962 2
JVM-虚拟机栈详解 ,手画详图,带你快速理解!!!
|
缓存 Java 索引
Spring 泛型处理之 ResolvableType
前言 泛型自 Java 5 诞生,为了支持泛型,Java 5 新增了 Type 类,表示 Java 中的某一种类型,反射包中提供的获取泛型类型的方法中多是返回 Type 类型,使用时需要进行强制类型转换,为了简化对泛型信息的获取,Spring 4 开始提供了一个 ResolvableType,本篇将详细对其分析。
598 0
|
并行计算 API Apache
Flink处理函数(ProcessFunction、KeyedProcessFunction、ProcessWindowFunction、 ProcessAllWindowFunction)
Flink处理函数(ProcessFunction、KeyedProcessFunction、ProcessWindowFunction、 ProcessAllWindowFunction)
Flink处理函数(ProcessFunction、KeyedProcessFunction、ProcessWindowFunction、 ProcessAllWindowFunction)
|
算法 关系型数据库 MySQL
索引合并机制详解
索引合并机制详解
773 0
索引合并机制详解