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

相关推荐
CV_J4 小时前
安装kibana
java·elasticsearch·spring cloud·docker·容器
码农水水5 小时前
国家电网Java面试被问:TCP的BBR拥塞控制算法原理
java·开发语言·网络·分布式·面试·wpf
2013092416276 小时前
1968年 Hart, Nilsson, Raphael 《最小成本路径启发式确定的形式基础》A* 算法深度研究报告
人工智能·算法
如何原谅奋力过但无声6 小时前
【力扣-Python-滑动窗口经典题】567.字符串的排列 | 424.替换后的最长重复字符 | 76.最小覆盖子串
算法·leetcode
浮尘笔记6 小时前
Go语言临时对象池:sync.Pool的原理与使用
开发语言·后端·golang
qq_336313936 小时前
java基础-网络编程-TCP
java·网络·tcp/ip
咕噜咕噜啦啦6 小时前
Java期末习题速通
java·开发语言
盐真卿7 小时前
python2
java·前端·javascript
玄冥剑尊7 小时前
贪心算法进阶
算法·贪心算法
玄冥剑尊7 小时前
贪心算法深化 I
算法·贪心算法