Java类加载基本过程详细介绍

发布时间 - 2026-01-10 21:49:49    点击率:

Java类加载基本过程详细介绍

基本过程:

  • 根据类的全限定名称加载定义类的二进制字节流。
  • 将字节流代表的静态存储结构转化为方法区的运行时数据结构
  • 内存中生成一个代表这个类的java.lang.Class对象,作为方法去这个类的各种数据访问入口

 数组类本身不通过类加载器创建,由java虚拟机直接创建,数组类的元素类型由类加载器加载。
数组类的元素类型:数组去掉所有维度后的类型, 

文件格式验证:

  1. 0xCAFEBABY 魔数开头;
  2. 主次版本号当前虚拟机可处理;
  3. 常量类型;
  4. 索引执行类型;
  5. utf8编码数据类型,

元数据验证:字节码描述信息语义分析:

  1. 是否有父类;
  2. 父类是否继承了final修饰的类;
  3. 非抽型类是否实现了父类或接口中需要实现的方法;
  4. 类中的字段、方法的覆盖,重载矛盾;

 字节码验证:通过语义流及控制流分析确定程序予以的合法性,正确性,方法体分析验证。

  1. 符号引用验证:虚拟机将符号引用转化为直接引用时候,解析阶段,对类自身以外信息进行匹配性验证
  2. 符号引用中通过字符描述的全限定名是否能找到对应的类;
  3. 指定类中是否存在符合方法字段的描述符,及简单名称所描述的方法和字段;
  4. 符号引用中类,字段,方法的访问性。

准备:在方法区中为类变量分配内存及设置类变量初始值。

  1. 初始值通常为数据类型的零值,final修饰的值直接初始化为相应值。
  2. 类变量为static修饰的变量,区分于实例变量。

 解析:虚拟机将常量池中的符号引用替换为直接引用过程

CONSTANT_Class_info,CONSTANT_Fieldref_info,CONSTANT_Methodref_info..

  1. 符号引用:以一组符号来描述所引用的目标,任何形式的字面量,只要使用时能无歧义的定位到目标,,与虚拟机内存实现无关,无关引用目标是否加载。
  2. 直接引用:直接指向目标的指针,偏移量或间接定位到目标的句柄,和虚拟机实现的内存相关,直接引用相关的目标对象必须已加载。
  3. 。。。

初始化:开始执行类定义中的Java程序代码。执行类构造器<cinit>()方法,

<cinit>():

  1. 编译器根据类文件中定义顺序自动收集类中的类变量的赋值动作和静态语句块儿的语句合并产生,静态语句块儿只能访问到其前定义的变量。
  2. 区别于类的构造方法,不需要显示的调用父类构造器,虚拟机保证子类的<cinit>()执行之前父类的<cinit>()已经执行完成。
  3. 父类中的静态语句块儿执行于前。
  4. <cinit>()对于类或接口不是必须的,如果没有变量赋值操作或静态语句块儿,则不生成。
  5. 接口的<cinit>()不需要先执行父接口的<cinit>(),同样接口的实现类<cinit>()也不需要。
  6. 线程安全:虚拟机保证多线程环境中<cinit>()正确的加锁,同步,同一时间只能有一个线程访问初始化类的<cinit>()

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Java类加载过程  # Java类加载过程详解  # Java  # 类加载过程  # 浅谈Java 类中各成分加载顺序和内存中的存放位置  # 深入理解Java 类加载全过程  # java 类加载与自定义类加载器详解  # java 详解类加载器的双亲委派及打破双亲委派  # 详解Java中类的加载顺序  # Java中类加载过程全面解析  # 加载  # 类中  # 转化为  # 也不  # 子类  # 不需要  # 句柄  # 数据结构  # 希望能  # 如果没有  # 详细介绍  # 要先  # 不需  # 谢谢大家  # 要使  # 是否能  # 多线程  # 是否存在  # 量为  # 区中 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  HTML 中动态设置元素 name 属性的正确语法详解  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  奇安信“盘古石”团队突破 iOS 26.1 提权  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何有效防御Web建站篡改攻击?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  js代码实现下拉菜单【推荐】  HTML 中如何正确使用模板变量为元素的 name 属性赋值  Laravel Fortify是什么,和Jetstream有什么关系  PythonWeb开发入门教程_Flask快速构建Web应用  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  如何快速配置高效服务器建站软件?  Laravel怎么为数据库表字段添加索引以优化查询  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Android 常见的图片加载框架详细介绍  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何在IIS服务器上快速部署高效网站?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何挑选最适合建站的高性能VPS主机?  Firefox Developer Edition开发者版本入口  再谈Python中的字符串与字符编码(推荐)  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  智能起名网站制作软件有哪些,制作logo的软件?  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  如何在服务器上配置二级域名建站?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Laravel中的withCount方法怎么高效统计关联模型数量  西安专业网站制作公司有哪些,陕西省建行官方网站?  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  公司门户网站制作流程,华为官网怎么做?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  LinuxCD持续部署教程_自动发布与回滚机制