JVM - 类的加载过程

加载 -- 链接 -- 初始化

一、加载完成的事情:

  1. 通过类的全限定名获取定义此类的二进制字节流
  2. 将字节码文件加载到方法区中
  3. 创建在堆中类对象,作为方法区该类的访问入口

二、链接完成的事情:

验证 -- 准备 -- 解析

  1. 验证
    1.  它的目的是保证加载的字节码是合法、合理并符合规范的。
  2. 准备
    1. 为静态变量分配内存,并初始化默认值
    2. final static 修饰的变量在编译阶段就已经放到使用类的常量池中(字节码文件)
  3. 解析
    1. 将常量池的符号引用解析为直接引用
    2. 符号引用[java]JVM之运行时常量池里到底有什么 - 简书 (jianshu.com)
      1. 将Java代码编译成Class文件后,Class文件并不会保存方法、字段等在内存中的布局。为了解决这个问题,Class文件会在常量池内保存方法、字段等的符号引用。所谓符号引用,我们可以简单的理解为真正内存布局的占位符,在类加载过程的解析阶段,符号引用会被替换为真正的直接引用。
      2. 将常量池中的符号引用替换为直接引用,主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符等7类符号引用

三、初始化完成的事情:

  1. 为 static 修饰的变量初始化赋值
  2. 静态变量直接赋值和静态代码块会被合并成一个 方法,在初始化时被调用
  3. 初始化是懒惰执行
final static c = 1;
Student.c 
上述语句并不会进行Student类加载,因为final修饰的变量,
在一个编译时候会将该final变量直接复制到使用类中或者到使用类的常量池中,
所以不会触发拥有者的类加载。

类的加载过程(类的生命周期)详解_幻の心的博客-CSDN博客_类加载过程

详解Java类加载过程 - 简书 (jianshu.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值