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是一个东西。


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


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


相关文章
|
3月前
|
存储 关系型数据库 MySQL
Mysql全面总结
本文全面总结了MySQL的相关知识,涵盖思维导图、架构、存储引擎、数据类型、索引、查询、事务、锁机制、调优、分区与分表分库、主从复制及其他问题。MySQL采用插件式存储引擎架构,支持多种存储引擎,如InnoDB和MyISAM,每种引擎具备不同的特性。文章详细介绍了InnoDB和MyISAM的对比,包括事务支持、行级锁定、索引类型等。此外,还探讨了MySQL的查询优化、性能调优、主从复制等内容,适合数据库开发者和运维人员阅读。如涉及版权问题,请联系作者删除。
Mysql全面总结
|
缓存 Java 数据库连接
|
存储 Oracle 安全
JDK 11 是发布了,但收费吗?
自 9 月 26 日,Oracle JDK 11 正式版本发布以来,一直被大家所看好,因为它是继 6、7、8之后,第一个长期支持的版本「见下图」,而 9 、10 估计多半会夭折了。。。
6074 0
JDK 11 是发布了,但收费吗?
|
Java 应用服务中间件 Android开发
IDEA 编译时 报 “常量字符串过长” 解决办法
IDEA 编译时 报 “常量字符串过长” 解决办法
2515 0
|
NoSQL Linux Redis
Docker安装Redis并配置文件启动
之前已经写过Redis分别在Linux、Windows上安装部署,及其集群环境搭建。这次写一篇Docker容器部署Redis的教程,配置文件方式启动服务。
Docker安装Redis并配置文件启动
|
7月前
|
消息中间件 Java API
一文带你速通Sentinel限流规则(流控)解读
一文带你速通Sentinel限流规则(流控)解读
|
存储 安全 算法
JVM-虚拟机栈详解 ,手画详图,带你快速理解!!!
JVM-虚拟机栈详解 ,手画详图,带你快速理解!!!
988 2
JVM-虚拟机栈详解 ,手画详图,带你快速理解!!!
|
Java
Java:函数式接口(Functional Interface)实现将函数作为方法参数传递
Java:函数式接口(Functional Interface)实现将函数作为方法参数传递
2050 0
|
Java 应用服务中间件 内存技术
IDEA远程debug实现原理
在 Debug 领域,JDK 有一套规范与体系来支持,即 Java Platform Debugger Architecture,JPDA 体系。在 JPDA 体系中定义了 三个角色,每个角色又对应着不同的技术模块支撑,分别为 JVMTI/JDWP/JDI。
IDEA远程debug实现原理
|
Arthas 监控 IDE
谈谈阿里arthas背后的原理
谈谈阿里arthas背后的原理
谈谈阿里arthas背后的原理