JVM虚拟机-类加载器、双亲委派模型、类装载的执行过程

一、什么是类加载器,类加载器有哪些

我们目前要讲的就是类加载子系统,主要作用是将java源码编译为class字节码文件后装载到运行时数据区,运行时数据区就可以去分配内存再通过执行引擎来执行java代码。

启动类加载器(也称引导类加载器),它嵌套在JVM内部,主要用于加载Java的核心库(也就是lib目录下的所有jar包);

扩展类加载器主要用于加载jdk安装目录内的扩展目录下的jar包,当用户自己的类文件也放在当前目录下时,就会自动被扩展类加载器来加载;

应用类加载器负责加载环境变量CLASSPATH下所有的类,它就是默认的类加载器 ,一般Java应用的类都是由它来完成加载的,在Java的日常应用开发中,类的加载基本上都是由以上这三种来互相配合完成加载的,各自加载各自的类

自定义类加载器在平时的应用很少。

* 总结

二、双亲委派模型

(1)双亲委派模型介绍

①加载student类

我们自己编写的student类首先应当给应用类加载器进行加载,但是双亲委派机制会委托上级的扩展类加载器进行加载,发现它还有上一级加载器,就会再委托上级的启动类加载器进行加载,发现该类没有在核心库目录下,就会再到扩展类中进行查找,最后回到子加载器(应用类加载器)来尝试加载。

②加载String类

当尝试在应用类加载器进行加载时,发现有上级加载器扩展类加载器与启动类加载器,最终在启动类加载器的核心库下找到了该String类,那么就会在此处把该类进行加载了,并且直接返回给应用类加载器进行使用。

(2)JVM为什么采用双亲委派模型

(3)总结

三、类装载的执行过程

(1)加载

主要就是通过当前该类的全名来获取二进制数据流,并将其读入到运行时数据区,在元空间中去存储类的信息,在堆中开辟一个空间来存储当前该类的class对象,方便后期创建对象进行使用。

(2)验证

(3)准备

通过static修饰的变量就是类变量(静态变量)

(4)解析

(5)初始化

(6)使用

(7)总结

相关推荐
拳打南山敬老院1 分钟前
Context 不是压缩出来的,而是设计出来的
前端·后端·aigc
初次攀爬者7 分钟前
Kafka + ZooKeeper架构基础介绍
后端·zookeeper·kafka
LucianaiB8 分钟前
Openclaw 安装使用保姆级教程(最新版)
后端
初次攀爬者23 分钟前
Kafka 基础介绍
spring boot·kafka·消息队列
华仔啊24 分钟前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang31 分钟前
用六边形架构与整洁架构对比是伪命题?
java·架构
用户83071968408232 分钟前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
哈密瓜的眉毛美34 分钟前
零基础学Java|第五篇:进制转换与位运算、原码反码补码
后端
AI软著研究员39 分钟前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish1 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack