JVM中类加载的过程

文章目录

一、类加载是什么

把.class文件加载到内存中,得到类对象的过程。

二、类加载过程

1.加载

找到.class文件,读取文件内容

2.验证

验证找到的文件是否为一个.class文件,.class文件有明确的数据格式

3.准备

给类对象分配空间。

注意这个空间是未初始化的空间,内存空间中的数据是全0的。

4.解析

字符串常量池中的符号引用替换为直接引用。(针对字符串常量进行初始化)

字符串常量池中的符号引用就是字符串常量,在.class文件中就已经存在了。这些字符串常量并不知道在内存中的实际地址,只知道彼此之间的相对位置。

在进行初始化后,每个字符串常量拥有了在内存中的实际地址(直接引用),但是彼此的相对位置并没有发生改变。符号引用替换成了直接引用。

举个生活中的例子,假设班级一起组织去看电影,老师会安排学生进行排队,小宇和小顾自然的排在了一起(符号引用)。在入场前小宇和小顾一直保持在一排,到了电影院后,分座位号(直接引用)时,自然也就是紧挨着了。(相对位置不变)。

5.初始化

针对类对象进行初始化

初始化静态成员、执行静态代码块,如果有父类还需要加载父类。

三、什么时候进行类加载

类加载非必要时不加载。

只有在下列三种情况时才会加载。

1.创建了类的实例;

2.使用了类的静态方法;

3.使用子类,触发了父类的加载。

四、双亲委派模型

实际是'单亲'。

1.三大类加载器

  • BootStrap ClassLoader 加载java标准库中的类
  • Extension ClassLoader 加载java非标准库中的雷(但是是Sun/Oracle扩展的库的类)
  • Application ClassLoader 加载自己创建的类

2.加载过程

祝大家顺顺利利健健康康天天开心,下次见!!!

相关推荐
jameslogo1 小时前
类加载机制
jvm
雪度娃娃3 小时前
转向现代C++——优先选用删除函数而非private未定义函数
java·jvm·c++
努力发光的程序员3 小时前
面试官与程序员谢飞机的3轮Java大厂面试问答实录:涵盖Spring Boot、微服务与数据库技术
java·jvm·spring boot·redis·面试·hibernate·microservices
橙淮3 小时前
并发编程(四)
java·jvm
Python+993 小时前
C++ 内存模型 & 底层原理
java·jvm·c++
右耳朵猫AI4 小时前
Java & JVM技术周刊 2026年第19周
java·开发语言·jvm
1candobetter4 小时前
单接口性能测试实践总结:压测方案设计、成功判定与 JVM 监控分析
java·jvm·压力测试·测试
plainGeekDev17 小时前
Android运行时面试题:ART和JVM的区别都搞不清,别写精通了
jvm·面试·kotlin
疯狂打码的少年1 天前
CISC vs RISC 对比
jvm·笔记
逻极1 天前
Java 从入门到精通:核心原理、最佳实践与性能优化
java·jvm·并发编程·集合框架