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 小时前
【java-数据结构】Java优先级队列揭秘:堆的力量让数据处理飞起来
java·开发语言·数据结构
亚历克斯神8 小时前
Java 代码质量与静态分析:2026 实战指南
java·spring·微服务
@hhr8 小时前
使用java对接火山方舟doubao-seedance-1.5-pro 模型进行视频生成
java·python·音视频
廋到被风吹走8 小时前
【LangChain4j】Java 生态中最灵活、功能最强大的纯 Java 大模型应用开发框架(支持声明式@AiService与复杂RAG/Agent)
java·开发语言·python
2201_761040598 小时前
如何处理SQL中的位运算_掌握BITWISE函数应用场景
jvm·数据库·python
艾克杏8 小时前
初学Java之范型
java·开发语言
heartbeat..8 小时前
java中常用的几种加密方式
java·开发语言
QQ22792391028 小时前
Java springboot基于微信小程序的智慧旅游导游系统景点门票酒店预订(源码+文档+运行视频+讲解视频)
java·spring boot·微信小程序·maven·vuejs
小碗羊肉8 小时前
【从零开始学Java | 第三十九篇】 打印流
java·开发语言
晔子yy8 小时前
[JAVA探索之路]带你手写多线程实现生产者-消费者模型
java·开发语言