当前位置: 首页 > 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.jsqmd.com/news/1028881/

相关文章:

  • 2026年海外独立站搭建费用
  • 小团队管理工具技术选型:进销存+CRM+库存+考勤一体化方案解析 - 奔跑123
  • 昆明官渡区黄金回收指南:2026年6月市场行情与安全变现攻略 - 专业黄金回收
  • 2026上海包车旅游公司 实测测评 出游大巴车队避坑真实分享 - LYL仔仔
  • 【计算机毕业设计案例】基于 SpringBoot 的商圈商品展示与线上购物系统设计 新零售模式下爱琴海购物公园商城系统设计与实现(程序+文档+讲解+定制)
  • Java毕设项目:基于 JavaWeb 的舰船游戏资讯百科管理系统设计 轻量化《战舰世界》百科信息交互平台的设计与实现 (源码+文档,讲解、调试运行,定制等)
  • C++智能指针循环引用破解
  • 2026广州海珠区名表回收店铺,浪琴万国全套加价收 - 逸程
  • 近协议网关深度解析:从二进制流到统一MQTT消息的工程实践
  • 2026宜宾本地承载力检测哪家专业?高口碑TOP 正规机构榜单 + 联系方式+ 实地测评 - 中安检测集团
  • 如何用SENAITE LIMS在30分钟内搭建专业实验室管理系统?
  • QorIQ T系列处理器深度解析:架构、DPAA与电源管理实战
  • 乌海黄金回收实测|正规实体老店,全城免费上门无套路✨ - 行行星
  • 2026宁波本地噪音检测哪家专业?TOP 正规机构榜单 + 环境噪声 + 工业噪音 + 低频噪音检测 附电话地址 - 鉴安检测
  • 2026松原业主高频选择的 5 家专业验房检测机构实地测评整理 毛坯验房 + 精装验房 + 空鼓开裂检测 附电话地址 - 科信检测
  • 2026辽阳本地噪音检测哪家专业?TOP 正规机构榜单 + 环境噪声 + 工业噪音 + 低频噪音检测 附电话地址 - 鉴安检测
  • 无需纯化,直接在天然环境中玩转分子互作
  • 徐州鼓楼区黄金回收简报:本地行情与六家机构服务概览 - 上门黄金回收
  • 统信UOS任务栏进阶玩法:从基础布局到效率提升全攻略
  • Java计算机毕设之基于 SpringBoot+Vue 的数码商城订单与会员管理系统设计 数字化消费场景下数码产品购物商城的设计与研发(完整前后端代码+说明文档+LW,调试定制等)
  • 2026天津本地环评检测哪家专业?TOP 正规机构榜单+环境监测 + CMA 检测 + 环保验收 附电话地址 - 中检检测集团
  • MPC8548E硬件加密引擎SEC 2.1:原理、集成与性能调优实战
  • ZFX山海证券:“甲骨文云需求推升目标价”
  • 重庆闲置女款积家约会腕表,近期回收行情怎么样? - 讯息早知道
  • 手机号码定位查询:3分钟学会免费获取地理位置信息的终极指南
  • 2026山南本地环评检测哪家专业?TOP 正规机构榜单+环境监测 + CMA 检测 + 环保验收 附电话地址 - 中检检测集团
  • 延迟直降90%!国标GB28181视频平台EasyGBS支持WebRTC WHIP推流设备接入,让万物互联更简单
  • 一篇文章讲透PLM产品生命周期管理!(3000+字)
  • 长沙卖黄金必懂10个高频问题,一次性讲透避坑逻辑 - 逸程
  • 绍兴上虞区黄金上门回收,足不出户轻松变现 - 专业黄金回收