类的生命周期

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

重点解析
  • 验证、准备、解析属于连接阶段
  • 连接阶段与加载阶段可以是并行的,但一定是加载先开始,连接后结束
  • 加载的方式有多种,可能是读取class文件,读取jar/zip,或者动态生成
  • 加载的时机取决于JVM的具体实现,预期会用到就加载,或者用到才加载
  • 只有当程序”首次”并且是”主动使用”类的时候,才会执行初始化
  • 什么叫主动使用:
    • 创建类的实例
    • 访问类的静态变量、或给该类的静态变量赋值
    • 调用累的静态方法
    • 反射调用类的静态方法、或反射创建类实例(与第一点相同)
    • 初始化一个类的子类(构造函数中先要调父类的构造函数)
    • JVM启动时被标明为启动类
  • 什么叫被动使用:
    • 不是主动使用的情况,都算被动使用
  • 类的静态变量初始化是从上往下执行赋值的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的对象生命周期是指对象从创建到销毁的整个过程。对象的生命周期包括以下几个阶段: 1. 创建阶段:通过关键字`new`创建对象,并分配内存空间。在这个阶段,对象的实例变量被赋予默认值,构造方法被调用,对象的状态被初始化。 2. 使用阶段:在对象创建后,可以通过调用对象的方法来使用它。在这个阶段,对象可以执行各种操作,处理数据等。 3. 引用阶段:对象可以被其他变量引用,以便在代码中持续使用。对象可以被多个变量引用,或者作为方法的参数传递给其他方法。 4. 终止阶段:当对象不再被引用时,垃圾回收器会自动回收对象所占用的内存空间。在这个阶段,垃圾回收器会调用对象的`finalize()`方法来清理资源和执行一些必要的操作。 生命周期与对象生命周期有一些不同之处。生命周期是指从加载到卸载的整个过程。生命周期包括以下几个阶段: 1. 加载阶段:当程序需要使用某个时,Java虚拟机会根据的全限定名(Fully Qualified Name)来查找并加载对应的文件。在加载阶段,Java虚拟机会执行一些必要的验证和准备工作。 2. 连接阶段:连接阶段分为验证、准备和解析三个步骤。验证阶段用于确保文件的字节流符合Java虚拟机规范,准备阶段用于为的静态变量分配内存并给其赋予初始值,解析阶段用于将符号引用转换为直接引用。 3. 初始化阶段:在初始化阶段,的静态变量会被赋予程序中指定的值,静态代码块会被执行。如果的初始化涉及到其他,那么这些也会被先进行初始化。 4. 使用阶段:在初始化完成后,可以通过名来访问的静态成员,并可以创建该的对象进行实例操作。 5. 卸载阶段:当不再被使用时,Java虚拟机会卸载该,并释放相关的资源。 总结起来,对象生命周期是指对象从创建到销毁的过程,而生命周期是指从加载到卸载的过程。对象与生命周期密切相关,对象的创建需要依赖的加载和初始化,而对象的销毁可能触发的卸载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值