类的生命周期

六、类的生命周期

20201221

10:51

 

目录

- 1. 加载

- 2. 连接

    - 2.1 验证

    - 2.2 准备

    - 2.3 解析

- 3. 卸载

 

 

1. 加载

此阶段完成3件事,还有一些其他细节这里暂时不展开。

  • 加载类的二进制字节流
  • 转换数据结构存于方法区
  • 内存中生成该类的类对象

2. 连接

2.1 验证

主要是检查合法性。包括:

2.2 准备

此处开始为类变量分配内存并设置类变量初始值。不过这个过程应该和对象初始化过程

Step 4 初始化零值做对比。

  • 只包括类变量,即静态变量。实例变量是在对象创建过程被初始化的。
  • 初始值是默认值,除非声明final,例如public static final int value=111 ,那么准备阶段 value 的值就被赋值为 111

2.3 解析

常量池里的符号引用转为为直接引用的过程。从这里可以理解符号引用是什么。

简单来说,原来任何类、接口、类方法、接口方法、方法类型这些都是一堆符号而不是真实的内存地址,这一步就会将这些符号与内存中实际存放偏移量做映射。

初始化

初始化是类加载的最后一步,也是真正执行类中定义的 Java 程序代码(字节码),初始化阶段是执行初始化方法 <clinit> ()方法的过程。

这是“类初始化”,必须和对象初始化,类对象初始化区分开。类初始化是一个独立的过程。

JAVA虚拟机对类初始化时机有严格的规范,防止多线程死锁的出现。

  • 主动使用类的时候,类发生初始化
    • new,访问静态变量、方法
    • 注意,静态块,静态变量的初始化在这里完成
  • 反射机制创建实例
  • 子类初始化前,父类会初始化
  • 其他java内部的
    • main,methdHandle,VarHandle,defualt

3. 卸载

就是类对象被GC。在2.5 如何判断一个类是无用的?已经讨论过,类的GC需要满足:

  • 无实例
  • 无引用
  • 无Loader
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值