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)总结

相关推荐
雷渊8 分钟前
库存系统如何避免超卖和少卖?
后端
天天扭码18 分钟前
一分钟解决 | 高频面试算法题——滑动窗口最大值(单调队列)
前端·算法·面试
电商api接口开发19 分钟前
ASP.NET MVC 实现增删改查(CRUD)操作的完整示例
后端·asp.net·mvc
xxy!27 分钟前
Spring 框架中用到的设计模式
java·spring·设计模式
东阳马生架构30 分钟前
Sentinel源码—7.参数限流和注解的实现二
java·sentinel
Klong.k33 分钟前
什么是 Stream
java·stream
曾经的三心草34 分钟前
博客系统-邮件发送-nginx-服务部署
java·数据库·nginx·邮件发送·服务部署
tan77º40 分钟前
【算法】BFS-解决FloodFill问题
算法·leetcode·宽度优先
Java中文社群41 分钟前
聊聊SpringAI流式输出的底层实现?
java·人工智能·后端
知识烤冷面42 分钟前
【力扣刷题实战】找到字符串中所有字母异位词
数据结构·算法·leetcode