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


相关推荐: PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  黑客入侵网站服务器的常见手法有哪些?  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何用VPS主机快速搭建个人网站?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  黑客如何利用漏洞与弱口令入侵网站服务器?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  googleplay官方入口在哪里_Google Play官方商店快速入口指南  PHP 500报错的快速解决方法  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  如何在IIS中配置站点IP、端口及主机头?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Laravel怎么上传文件_Laravel图片上传及存储配置  Laravel如何处理CORS跨域请求?(配置示例)  图册素材网站设计制作软件,图册的导出方式有几种?  无锡营销型网站制作公司,无锡网选车牌流程?  如何快速生成凡客建站的专业级图册?  如何自定义建站之星模板颜色并下载新样式?  网站制作免费,什么网站能看正片电影?  nginx修改上传文件大小限制的方法  如何有效防御Web建站篡改攻击?  如何在万网利用已有域名快速建站?  高防服务器租用指南:配置选择与快速部署攻略  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  利用python获取某年中每个月的第一天和最后一天  如何在Windows环境下新建FTP站点并设置权限?  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel中的Facade(门面)到底是什么原理  北京企业网站设计制作公司,北京铁路集团官方网站?  Laravel如何处理表单验证?(Requests代码示例)  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  如何快速生成橙子建站落地页链接?