千千梦丶琪 发表于 4 天前

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

https://i-blog.csdnimg.cn/direct/b2b8ceff6220465d8690d1964bdf4a49.png
一、什么是类加载器,类加载器有哪些

我们如今要讲的就是类加载子系统,主要作用是将java源码编译为class字节码文件后装载到运行时数据区,运行时数据区就可以去分配内存再通过执行引擎来执行java代码。
https://i-blog.csdnimg.cn/direct/83ddf4107b934a9c9ea50a1846b6b3ca.png
https://i-blog.csdnimg.cn/direct/ea9e1fc848334d84b3b8e52fc60c59a0.png
启动类加载器(也称引导类加载器),它嵌套在JVM内部,主要用于加载Java的焦点库(也就是lib目录下的全部jar包);
扩展类加载器主要用于加载jdk安装目录内的扩展目录下的jar包,当用户自己的类文件也放在当前目录下时,就会自动被扩展类加载器来加载;
应用类加载器负责加载环境变量CLASSPATH下全部的类,它就是默认的类加载器,一样平常Java应用的类都是由它来完成加载的,在Java的日常应用开发中,类的加载根本上都是由以上这三种来相互配合完成加载的,各自加载各自的类;
自界说类加载器在平时的应用很少。
* 总结

https://i-blog.csdnimg.cn/direct/68160f90495f4e02842bd9c18aa1b94d.png
二、双亲委派模子

(1)双亲委派模子介绍

https://i-blog.csdnimg.cn/direct/837738919bb04bb49ab5d720b2a12865.png
①加载student类

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

当尝试在应用类加载器进行加载时,发现有上级加载器扩展类加载器与启动类加载器,终极在启动类加载器的焦点库下找到了该String类,那么就会在此处把该类进行加载了,并且直接返回给应用类加载器进行使用。
(2)JVM为什么采用双亲委派模子

https://i-blog.csdnimg.cn/direct/49ba04a5c1ec46ac99b26d853297e55e.png
(3)总结

https://i-blog.csdnimg.cn/direct/dcce99cf8d25429ab18704fe8f394d77.png
三、类装载的执行过程

https://i-blog.csdnimg.cn/direct/dae4a3bd9c684e4eaeb885725bb3d73a.png
(1)加载

https://i-blog.csdnimg.cn/direct/5e1f5763ffb94cbb8f3182bf39d6391c.png
主要就是通过当前该类的全名来获取二进制数据流,并将其读入到运行时数据区,在元空间中去存储类的信息,在堆中开发一个空间来存储当前该类的class对象,方便后期创建对象进行使用。
(2)验证

https://i-blog.csdnimg.cn/direct/82ce0c74a04b4aec8680de2aa7fa3450.png
(3)准备

通过static修饰的变量就是类变量(静态变量)
https://i-blog.csdnimg.cn/direct/a5db30ca12994a5da78cf97551f61234.png
(4)解析

https://i-blog.csdnimg.cn/direct/05f7f8c4dc7448649182343bd9c593a7.png
(5)初始化

https://i-blog.csdnimg.cn/direct/06382da3353a4e52ba31e62f057920c1.png
(6)使用

https://i-blog.csdnimg.cn/direct/8b210688b534470bba796f7acdf52fc4.png
(7)总结

https://i-blog.csdnimg.cn/direct/a7f5ff3421b648eaa8a50b3d4663cd74.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: JVM虚拟机-类加载器、双亲委派模子、类装载的执行过程