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

【深入理解】Java的类加载过程

问题概述

类加载就是把.class文件的二进制数据读进内存,经过校验,转换、最终变成JVM能用的Class对象。

二进制流不一定非得来自.class文件,也可以是字节码工具动态生成的、或者从网络传过来的,只要格式对,JVM都认。

具体流程细节

整个类加载流程分为三大阶段:加载、连接、初始化。连接又能拆分成验证、准备、解析三步。所以细分下来是5个阶段:

1,加载
把二进制流读进内存,在方法区生成类的运行时数据结构,同时在堆里创建一个class对象作为访问入口
2,验证
校验二进制流是否符合Class文件规范,包括魔数检查、版本号校验、元数据验证、字节码验证、符好引用验证。这一步是为了防止恶意代码搞崩JVM。
3,准备
类变量(static修饰的变量)分配内存并设置初始零值。注意这里只是零值,比如static int a = 123在准备阶段a的值是0,不是123。但如果是static final int a = 123,编译期就确定了,准备阶段直接赋值123。
4,解析
常量池里的符号引用替换成直接引用。符号引用就是一个字符串形式的标识,比如Java/lang/Object;直接引用是真正的内存地址或偏移量,能直接定位到目标。
5,初始化
执行类构造器<clinit>()方法,这时候才真正执行static int a = 123这种赋值操作,静态代码块就是在这个阶段跑的

准备阶段和初始化的区别:

publicclassLoadingDemo{// 准备阶段:value = 0// 初始化阶段:value = 100privatestaticintvalue=100;// 准备阶段就直接赋值 200,因为是 final 常量privatestaticfinalintCONSTANT=200;static{System.out.println("静态代码块执行,value = "+value);}}

扩展

1,类加载的触发时机
JVM规范规定了6种情况必须立即对类进行初始化:

  • 遇到new、getstatic、putstatic、invokestatic这4条字节码指令时。对应的Java代码就是new对象、读取或设置类的静态字段(被final修饰的常量除外)、调用静态方法
  • 使用Java.lang.reflect包对类进行反射调用时
  • 初始化子类时发现父类还没初始化,先把父类初始化了
  • JVM启动时指定的主类(包含main方法对应的那个类)
  • JDK7开始的动态语言支持,如果MethodHandle实例解析结果是REF_getstatic、REF_putstatic、REF_invokestatic、REF_newInvokeSpecial这四种句柄,对应的类要先初始化
  • 接口中定义了default方法,实现类初始化前要先初始化这个接口
    2,类加载器的层次结构
    JVM的类加载采用双亲委派模型,有三种内置的类加载器:
    1,Bootstrap ClassLoader:最顶层的加载器,C++实现的,负责加载JAVA_HOME/lib目录下的核心类库。
    2,Extension ClassLoader:负责加载JAVA_HOME/lib/ext目录下的扩展类库。JDK9之后改名叫Platform ClassLoader
    3,Application ClassLoader:加载classpath下的类,也就是我们自己写的代码和引入的第三方jar包
http://www.gsyq.cn/news/1540759.html

相关文章:

  • 【计算机毕业设计案例】基于 SpringBoot 的商圈商品展示与线上购物系统设计 新零售模式下爱琴海购物公园商城系统设计与实现(程序+文档+讲解+定制)
  • C++智能指针循环引用破解
  • QorIQ T系列处理器深度解析:架构、DPAA与电源管理实战
  • 乌海黄金回收实测|正规实体老店,全城免费上门无套路✨ - 行行星
  • 2026宁波本地噪音检测哪家专业?TOP 正规机构榜单 + 环境噪声 + 工业噪音 + 低频噪音检测 附电话地址 - 鉴安检测
  • 2026宜宾本地承载力检测哪家专业?高口碑TOP 正规机构榜单 + 联系方式+ 实地测评 - 中安检测集团
  • 2026松原业主高频选择的 5 家专业验房检测机构实地测评整理 毛坯验房 + 精装验房 + 空鼓开裂检测 附电话地址 - 科信检测
  • 2026天津本地环评检测哪家专业?TOP 正规机构榜单+环境监测 + CMA 检测 + 环保验收 附电话地址 - 中检检测集团
  • 无需纯化,直接在天然环境中玩转分子互作
  • ZFX山海证券:“甲骨文云需求推升目标价”
  • 延迟直降90%!国标GB28181视频平台EasyGBS支持WebRTC WHIP推流设备接入,让万物互联更简单
  • 2026山南本地环评检测哪家专业?TOP 正规机构榜单+环境监测 + CMA 检测 + 环保验收 附电话地址 - 中检检测集团
  • 重庆闲置女款积家约会腕表,近期回收行情怎么样? - 讯息早知道
  • 北京分手协议履行纠纷律所指南:书面约定反悔后如何依法维权? - 品牌2026
  • 【录取率TOP1】四川普华教育2027届单招培训火热报名中...... - 四川单招培训
  • 杭州黄金回收实测:5家门店套路拆解与避坑指南 - 奢侈品回收评测
  • 2026南宁业主高频选择的 5 家专业验房检测机构实地测评整理 毛坯验房 + 精装验房 + 空鼓开裂检测 附电话地址 - 科信检测
  • 2026北京出手欧米茄别踩坑!为何别人能多卖上千? - 逸程
  • 天津黄金回收门店排行榜|禹竞名奢汇稳居榜首,本地变现首选不踩坑 - 名奢变现站
  • 遗失登报怎么办理?一文给你讲清楚! - 慧办好
  • USDPAA架构下PPAC/PPAM设计:用户态数据包处理的高性能实践
  • 银河麒麟 V10 重装打印服务 (CUPS)+ 打印机驱动完整教程
  • GAN合成数据:工业级可控生成原理与实战指南
  • 2026太原搬家公司 避坑TOP5测评 长短途搬家闭眼选 - LYL仔仔
  • 2026快手保存无水印视频教程,快手视频去水印方法官方合规指南,第三方快手去水印工具风险详解 - 科技热点发布
  • 临沂市本土黄金白银铂金彩金回收品牌实力排行更新,从报价到服务全测评,实力领跑同行以及联系方式推荐 - 亦辰小黄鸭
  • 三明市闲置黄金白银铂金彩金回收变现全攻略 五家靠谱实体回收店深度解析+2026实时金价+避坑实战案例及联系方式 - 前途无量YY
  • 2026泰州电商企业做GEO应该怎么选服务商?本地靠谱GEO服务商推荐及选型实战解析 - 科技快讯
  • MPC8536E/MPC8535E SEC 3.0硬件加密引擎实战:原理、集成与性能优化
  • 三亚市闲置黄金白银铂金彩金回收变现全攻略 五家靠谱实体回收店深度解析+2026实时金价+避坑实战案例及联系方式 - 前途无量YY