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 】 【 网络技术251811 】 【 AI营销90571


相关推荐: ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel如何实现多对多模型关联?(Eloquent教程)  Java遍历集合的三种方式  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何快速建站并高效导出源代码?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  三星网站视频制作教程下载,三星w23网页如何全屏?  Java垃圾回收器的方法和原理总结  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  javascript读取文本节点方法小结  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  如何快速搭建高效简练网站?  Angular 表单中正确绑定输入值以确保提交与验证正常工作  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel如何处理异常和错误?(Handler示例)  网站制作企业,网站的banner和导航栏是指什么?  javascript中对象的定义、使用以及对象和原型链操作小结  如何快速搭建高效WAP手机网站吸引移动用户?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  进行网站优化必须要坚持的四大原则  青岛网站建设如何选择本地服务器?  如何快速搭建安全的FTP站点?  如何在云主机快速搭建网站站点?  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  网站制作报价单模板图片,小松挖机官方网站报价?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  如何快速配置高效服务器建站软件?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  如何在局域网内绑定自建网站域名?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何解决hover在ie6中的兼容性问题  Laravel如何处理文件下载请求?(Response示例)  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  微信小程序 input输入框控件详解及实例(多种示例)  做企业网站制作流程,企业网站制作基本流程有哪些?  网站建设要注意的标准 促进网站用户好感度!  简历在线制作网站免费版,如何创建个人简历?  Linux安全能力提升路径_长期防护思维说明【指导】  如何在宝塔面板中创建新站点?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Swift中swift中的switch 语句  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  开心动漫网站制作软件下载,十分开心动画为何停播?  如何用AI帮你把自己的生活经历写成一个有趣的故事?