类的生命周期

本文详细介绍了JVM中类的加载过程,包括加载、验证、准备、解析和初始化五个阶段,以及类的主动使用与被动使用的区别。
周期内容
加载把类信息加载到JVM方法区中,并在栈区中创建这个类的java.lang.Class对象,作为访问这个类信息的入口。
验证验证加载的内容能否被JVM正确运行。
准备为类的静态变量分配内存,并赋JVM的默认值。
解析把类在常量池中的符号引用转为直接引用,即类的方法名、字段名等转为直接的内存地址。
初始化在程序首次主动使用类的时候,执行类的初始化语句,给静态变量赋值。
使用使用类…
卸载当JVM中不存在该类的任何实例,并且该类的Class对象没任何地方被引用,并且加载类的ClassLoader已被回收,那么清空该类在方法区中的信息。

重点解析
  • 验证、准备、解析属于连接阶段
  • 连接阶段与加载阶段可以是并行的,但一定是加载先开始,连接后结束
  • 加载的方式有多种,可能是读取class文件,读取jar/zip,或者动态生成
  • 加载的时机取决于JVM的具体实现,预期会用到就加载,或者用到才加载
  • 只有当程序”首次”并且是”主动使用”类的时候,才会执行初始化
  • 什么叫主动使用:
    • 创建类的实例
    • 访问类的静态变量、或给该类的静态变量赋值
    • 调用累的静态方法
    • 反射调用类的静态方法、或反射创建类实例(与第一点相同)
    • 初始化一个类的子类(构造函数中先要调父类的构造函数)
    • JVM启动时被标明为启动类
  • 什么叫被动使用:
    • 不是主动使用的情况,都算被动使用
  • 类的静态变量初始化是从上往下执行赋值的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值