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

作者:lqh 时间:2023-04-15 10:54:14 

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类,加载过程
0
投稿

猜你喜欢

  • 学习Java之如何正确地向上转型与向下转型

    2022-10-12 09:58:10
  • Java 使用IO流实现大文件的分割与合并实例详解

    2023-08-23 09:33:33
  • Android Studio报:“Attribute application@theme or @ icon ”问题的解决

    2023-11-07 09:49:18
  • Redis原子计数器incr,防止并发请求操作

    2021-07-03 13:35:15
  • Android开发之ListView的head消失页面导航栏的渐变出现和隐藏

    2022-03-02 14:25:24
  • Android编程实现图片的颜色处理功能示例

    2022-10-08 23:15:25
  • Android如何通过组合的方式自定义View

    2022-11-01 04:33:46
  • C# WinForm创建Excel文件的实例

    2023-08-06 19:47:06
  • Android利用属性动画实现优酷菜单

    2022-06-15 13:16:44
  • SpringMVC 上传文件 MultipartFile 转为 File的方法

    2021-07-06 00:28:12
  • View触发机制API实现GestureDetector OverScroller详解

    2023-01-24 00:57:08
  • Eclipse项目怎么导入IDEA并运行(超详细)

    2021-11-15 06:51:41
  • Springboot集成Elasticsearch的步骤与相关功能

    2022-07-23 06:47:30
  • BeanUtils.copyProperties使用总结以及注意事项说明

    2023-06-27 18:06:18
  • Java经验点滴:类注释文档编写方法

    2023-11-06 03:50:11
  • 解决Spring Batch框架job任务只跑一次的问题

    2023-01-07 00:13:53
  • Java事务的个人理解小结

    2023-11-29 12:10:37
  • Android下使用TCPDUMP实现数据抓包教程

    2021-12-08 07:58:42
  • java中Swing会奔跑的线程侠

    2021-12-14 23:47:36
  • 利用AOP实现SqlSugar自动事务

    2021-11-24 11:56:42
  • asp之家 软件编程 m.aspxhome.com