类的加载机制是怎么样的?下面我们分几个部分来讲解
1,这些概念你知道是什么意思吗?
相信你应该听过不少这样的词语,
类加载机制,双亲委托机制,BootstrapClassLoader、ExtClassLoader、AppClassLoader
如果你不清楚,这些都是什么意思?没关系,看完下面的内容,你就清楚了
2,什么是类的加载机制?
所谓类的加载机制是指JVM将java类加载到内存的过程。
我们知道,JVM使用Java类的流程如下:
1,首先,Java源文件----编译---->class文件
2,其次,类加载器ClassLoader会读取这个.class文件,并将其转化为java.lang.Class的实例。有了该实例,JVM就可以使用他来创建对象,调用方法等操作了。
那么ClassLoader是以一种什么机制来加载Class的?
具体,分为下面两个方面来考虑
1,这些class文件的来源都有哪些?
2,谁来加载这些class
3,Class文件的来源都有哪些?
1,Java内部自带的核心类,位于$JAVA_HOME/jre/lib
2,Java的扩展类,位于$JAVA_HOME/jre/lib/ext目录下
3,我们自己开发的类或项目开发用到的第三方jar包,位于我们项目的目录下,比如WEB-INF/lib目录
4,谁来加载这些Class?
针对不同的来源,Java分了不同的ClassLoader来加载
1,Java核心类,这些是Java运行的基础类,由一个名为BootstrapClassLoader加载器负责加载。
这个类加载器被称为“根加载器或引导加载器”。
注意:BootstrapClassLoader不继承ClassLoader,是由JVM内部实现。
2,Java扩展类,是由ExtClassLoader负责加载,被称为“扩展类加载器”。
3,项目中编写的类,是由AppClassLoader来负责加载,被称为“系统类加载器”。
那么问题来了,String这个常用类,应该是由哪个类加载器来加载?
你可能会说,这还不简单,String属于核心类,所以由BootstrapClassLoader加载,但这个答案的前提是,我们知道String属于核心类,而作为JVM的加载机制,它是怎么去做到的?所以,我们推出了一个关键点:双亲委托机制
5,双亲委托机制
就是加载一个类,会先获取到一个系统类加载器AppClassLoader的实例,然后往上层层请求,先由BootstarpClassLoader去加载,如果BootStrapClassLoader发现没有,再下发给ExtClassLoader去加载,还是没有,才由AppClassLoader去加载。
总体来说,就是由上层类加载器优先加载,不存在,再由下层类加载器加载,这也是一种安全的考虑。
6,程序验证
案例1:创建一个自己的类,然后打印其类加载器
publicclass ClassLoaderTest {
publicstaticvoid main(String[] args) throws ClassNotFoundException {
Class<?> clazz = Class.forName("com.qianfeng.thread.client.Programmer");
ClassLoader classLoader = clazz.getClassLoader();
System.out.println(classLoader.getClass().getSimpleName());
}
}
案例2:打印其双亲类加载器信息
while(classLoader.getParent() != null){
classLoader = classLoader.getParent();
System.out.println("-->"+classLoader.getClass().getSimpleName());
}
--------------------- 本文来自 互联网十年老兵- 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/happy_coding_life/article/details/80381245?utm_source=copy
相关推荐
JVM实战-JVM类加载机制案例分析
Java面试题-内存+GC+类加载器+JVM调优
2. 高频面试题-JVM-3876439997404198.md
JavaSE常见面试题-高级反射-JVM篇
JVM 的运行机制 多线程 JVM 的内存区域 JVM 会创建操作系统的接口创建一个原生线程。JVM 线程和操作系统线程是一一对应的
- 请你描述一下 Java 中的类加载机制? - 加载 - 验证 - 准备 - 解析 - 初始化 - 使用 - 卸载 - 在 JVM 中,对象是如何创建的? - 内存分配方式有哪些呢? - 请你说一下对象的内存布局? - 对象头 ...
核心内容在于介绍java虚拟机即jvm相关的面试题,包括jre、jdk、jvm等等内容,有该背诵的八股文内容,也有源码coding借鉴,应付下面试还是ok的!!!
kotlinx-coroutines-io-jvm-0.1.1.jar
2023JVM面试题及答案-共50道.docx 2023JVM面试题及答案-共50道.docx 2023JVM面试题及答案-共50道.docx 2023JVM面试题及答案-共50道.docx 2023JVM面试题及答案-共50道.docx 2023JVM面试题及答案-共50道.docx 2023JVM...
nginx-upstream-jvm-route 支持nginx版本1.15 解决nginx: [emerg] invalid parameter "srun_id=tomcat1" 问题
2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM面试题及答案-共45道.docx 2023JVM...
把原来的swt.jar替换成这个就能解决 Cannot load 32-bit SWT libraries on 64-bit JVM问题
此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件...
08-Java虚拟机(JVM)面试题-重点
2023JVM面试题及答案-共38道.docx 2023JVM面试题及答案-共38道.docx 2023JVM面试题及答案-共38道.docx 2023JVM面试题及答案-共38道.docx 2023JVM面试题及答案-共38道.docx 2023JVM面试题及答案-共38道.docx 2023JVM...
2023JVM面试题及答案-共77道 .docx 2023JVM面试题及答案-共77道 .docx 2023JVM面试题及答案-共77道 .docx 2023JVM面试题及答案-共77道 .docx 2023JVM面试题及答案-共77道 .docx 2023JVM面试题及答案-共77道 .docx ...
书接上半部分,核心内容就在于介绍jvm方面的调优方案以及策略,这部分主要是介绍了堆内存方面的分区介绍、GC等内容,在应付面试以及平常工作中还是有点作用的!!!
性能调优专题-jvm类加载机制-performance-jvmclassloader
JAVA-JVM-面试题,java面试题
大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-1.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-3.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM...