JVM类加载的过程详解
创作时间:
作者:
@小白创作中心
JVM类加载的过程详解
引用
1
来源
1.
http://www.cdweb.net/article/cgicsd.html
JVM类加载的过程主要包括加载、验证、准备、解析和初始化五个阶段。下面将详细介绍每个阶段的具体步骤:
1. 加载
在加载阶段,JVM主要完成以下三件事:
- 通过一个类的全限定名来获取该类的二进制字节流
- 将这个字节流的静态存储结构转化为方法区运行时数据结构
- 在内存堆中生成一个代表该类的
java.lang.Class
对象,作为该类数据的访问入口
2. 验证
验证、准备、解析这三步可以看做是一个连接的过程,将类的字节码连接到JVM的运行状态之中。验证的主要目的是确保Class文件的字节流中包含的信息符合当前虚拟机的要求,不会威胁到JVM的安全。验证主要包括以下几个方面的验证:
- 文件格式的验证:验证字节流是否符合Class文件的规范,是否能被当前版本的虚拟机处理
- 元数据验证:对字节码描述的信息进行语义分析,确保符合Java语言规范
- 字节码验证:通过数据流和控制流分析,确定语义是合法的,符合逻辑的
- 符号引用验证:这个校验在解析阶段发生
3. 准备
准备阶段为类的静态变量分配内存,初始化为系统的初始值。对于final static
修饰的变量,直接赋值为用户的定义值。例如:
public static int a = 7;
在准备阶段过后的初始值为0,而不是7。
4. 解析
解析阶段将常量池内的符号引用转为直接引用(如物理内存地址指针)。
5. 初始化
初始化阶段是真正开始执行类中定义的Java代码的阶段。具体来说:
- 初始化阶段是执行类构造器
<clinit>()
方法的过程。类构造器<clinit>()
方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static
块)中的语句合并产生的。 - 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
- 虚拟机会保证一个类的
<clinit>()
方法在多线程环境中被正确加锁和同步。
热门推荐
金星上面有什么?那里是天堂还是地狱?
涂眼霜不是交智商税!这几种情况真的可以买(附推荐清单)
降温了!天冷极易诱发心梗、脑梗,做好2件事能保命!
白醋还是陈醋?教你正确选择适合日常饮食的醋
千年红韵,朱砂——中华文明的璀璨印记
74家医院加入国家中医重症医学优势专科联盟!看生死一线,中医药如何挽狂澜?
汽车长时间不开怎样避免电瓶亏电?修理工手把手教你,一看就会!
韩国签证多少钱?法律视角下的全面解析
牙龈炎症状有哪些
停服重启后如何处理“魔兽世界”用户数据维护与恢复策略探索
小儿腹胀气快速排气法
诸葛亮死后,姜维究竟是如何成为蜀汉职位最高的将领?
为什么电子血压计越测越低?是因为电子血压计不准?医生讲出实话
消毒消杀科普——带你了解常用消毒剂、消毒方法及注意事项
山水画临摹的技巧与方法!
换东西合同的法律效力及书写要点
号称能缓解高血压!老人2万买治疗仪竟把自己电到头疼
廖海军案:十年冤狱,是谁让一个家庭的人生被改写?
小区配套关注要点有哪些?如何选择合适的小区配套设施?
人工智能给全球数字贸易加了一把火
全日制和非全日制的课程设置有何不同?详细解读两者的区别
回顾:每年狂吞30亿吨!马里亚纳海沟疯狂吸水,为何海平面不降反升?
如何处理工作中的失误和失败
农村光伏骗局升级!数万农民血汗钱打水漂,真相令人脊背发凉
辣子鸡的家常做法,外酥里嫩鲜辣过瘾,超级详细讲解建议收藏
喷砂洁牙:温和高效的牙齿清洁护理方法
“拍片子要穿防护服吗?”医院疏忽遭罚引热议!
第一学历和第二学历有什么区别?学籍冲突吗?哪个含金量高
开发步骤详解:从零开始构建高效应用程序
北向资金实时数据停止公布,A股投资将迎重大变化