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


相关推荐: Laravel如何实现API速率限制?(Rate Limiting教程)  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  详解CentOS6.5 安装 MySQL5.1.71的方法  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Laravel怎么判断请求类型_Laravel Request isMethod用法  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何破解联通资金短缺导致的基站建设难题?  如何在局域网内绑定自建网站域名?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Android GridView 滑动条设置一直显示状态(推荐)  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  微信小程序 wx.uploadFile无法上传解决办法  海南网站制作公司有哪些,海口网是哪家的?  如何在 React 中条件性地遍历数组并渲染元素  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  移动端脚本框架Hammer.js  如何在阿里云虚拟主机上快速搭建个人网站?  javascript中的try catch异常捕获机制用法分析  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何快速搭建个人网站并优化SEO?  PHP 500报错的快速解决方法  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  详解Android中Activity的四大启动模式实验简述  如何快速生成高效建站系统源代码?  ,交易猫的商品怎么发布到网站上去?  深圳网站制作平台,深圳市做网站好的公司有哪些?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  如何快速生成ASP一键建站模板并优化安全性?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  lovemo网页版地址 lovemo官网手机登录  如何用PHP工具快速搭建高效网站?  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何在建站宝盒中设置产品搜索功能?  中山网站制作网页,中山新生登记系统登记流程?