当前位置: 首页 > news >正文

[JVM] 京东一面~说一下Java 类加载过程

系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。

通过全限定名来加载生成 class 对象到内存中,然后进行验证这个 class 文件,包括文件格式校验、元数据验证,字节码校验等。准备是对这个对象分配内存。解析是将符号引用转化为直接引用(指针引用),初始化就是开始执行构造器的代码 。


文章目录

    • 1. 加载
    • 2. 验证
    • 3. 准备
    • 4. 解析
    • 5. 初始化

在这里插入图片描述

1. 加载

类加载过程的第一步,主要完成下面 3 件事情:

  1. 通过全类名获取定义此类的二进制字节流
  2. 将字节流所代表的静态存储结构转换为方法区的运行时数据结构
  3. 在内存中生成一个代表该类的 Class 对象,作为方法区这些数据的访问入口

2. 验证

主要验证文件格式、元数据、字节码以及符号引用。
在这里插入图片描述

3. 准备

准备阶段是正式为类变量分配内存并设置类变量初始值的阶段。

4. 解析

解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用限定符 7 类符号引用进行。
符号引用就是一组符号来描述目标,可以是任何字面量。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。

5. 初始化

初始化阶段是执行初始化方法 ()方法的过程,是类加载的最后一步,这一步 JVM 才开始真正执行类中定义的 Java 程序代码(字节码)。

声明: 文章内容属于站出巨人的肩膀上进行输出总结

http://www.lryc.cn/news/242651.html

相关文章:

  • 2023 年 认证杯 小美赛 ABC题 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析
  • N-134基于java实现捕鱼达人游戏
  • MTK联发科MT6762/MT6763/MT6765安卓核心板参数规格比较
  • 仿ChatGPT对话前端页面(内含源码)
  • js粒子效果(一)
  • 程序员必备工具篇 / 程序员必备基础:Git
  • MacBook使用指南
  • 数据库的事务的基本特性,事务的隔离级别,事务隔离级别如何在java代码中使用,使用MySQL数据库演示不同隔离级别下的并发问题
  • Robust taboo search for the quadratic assignment problem-二次分配问题的鲁棒禁忌搜索
  • Linux:创建进程 -- fork,到底是什么?
  • 基于SpringBoot+vue的token验证
  • Clickhouse设置多磁盘存储策略
  • Python开发运维:Django 4.2.7 使用Celery 5.3.5 完成异步和定时任务
  • 媒体增加日活量的有效策略
  • es6新特性总结
  • Spring Boot + hutool 创建海报图片
  • 0002Java程序设计-springboot在线考试系统小程序
  • Linux(Centos)上使用crontab实现定时任务(定时执行脚本)
  • 【Leetcode合集】20. 有效的括号
  • OpenGL 绘制线(Qt)
  • Java | 多线程并发编程CountDownLatch实践
  • 分布式定时任务系列6:XXL-job触发日志过大引发的CPU告警
  • Spark RDD、DataFrame和Dataset的区别和联系
  • 代码随想录算法训练营第四十五天|139.单词拆分、背包问题总结
  • 深度学习卫星遥感图像检测与识别 -opencv python 目标检测 计算机竞赛
  • wxWidgets 3.2.4发布 —— 发布于2023年11月11日
  • PyQt6运行QTDesigner生成的ui文件程序
  • 基于mediapipe的人手21点姿态检测模型—CPU上检测速度惊人
  • 系统架构设计: 21 论敏捷软件开发方法及其应用
  • 【深度学习】脸部修复,CodeFormer,论文,实战