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

相关推荐
金銀銅鐵4 小时前
为什么枚举类中可以定义抽象方法
java·后端·ai编程
陈随易4 小时前
Vue 编译器换掉 source map,快了三四成
前端·后端·程序员
文丑颜不良啊5 小时前
LeetCode1941~1960题目解析
java·leetcode
txxzjmzlh6 小时前
SpringBoot 统⼀功能处理
java·spring boot·后端
nice_lcj5208 小时前
Java Lambda 表达式入门:怎么写、怎么用、常用方法有哪些
java·开发语言·后端·面试
码农小河668 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql
IT_陈寒8 小时前
Redis大key删除为什么会导致服务卡顿?我的线上事故复盘
前端·人工智能·后端
系统集成-鹰翔8 小时前
ERP图片改名后仍命中识别缓存:缓存键、十分钟到期与调用计数
javascript·经验分享·后端
用户8356290780519 小时前
使用 Python 在 Excel 中添加和自定义迷你图
后端·python
码事漫谈9 小时前
给AI看一颗❤️,它就开始写递归了
后端