《架构风清扬-Java面试系列第13讲》说一说Java对象在内存中的生命周期

本文详细介绍了Java对象在内存中的生命周期,包括创建、使用、不可达、收集、终结以及可能的内存重分配阶段,帮助读者理解对象何时会被垃圾回收机制处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,加个餐!

像线程的生命周期,Servlet的生命周期,相信这类问题大家都非常熟悉了

Java对象在内存中的生命周期,这个题目倒是有些新鲜

来,思考片刻,说出你的答案

(PS:上图缓冲)

Java对象在其内存中的生命周期可以被划分为多个阶段,下面钊哥逐个给大家说一说

1,创建阶段(Creation / Created)

(1)当Java程序通过new关键字创建一个对象时,首先会在堆内存中为对象分配足够的存储空间

(2)分配空间后,会调用相应的构造器初始化对象的实例变量

(3)若类中有静态成员变量,它们会在类加载的过程中进行初始化,而非与每个对象实例一起初始化

2,使用阶段(Using / In Use)

(1)对象创建完成后进入应用阶段,在这个阶段对象可以被程序访问和操作

(2)在这个阶段,对象持有至少一个强引用(Strong Reference),因此它是可达的,不会被视为垃圾

3,不可达阶段(Unreachable / Unreachable)

(1)当对象没有任何强引用指向它时,就进入了不可达状态,也就是说从根对象(GC Roots)出发无法通过引用链找到这个对象。

(2)JVM垃圾回收器在进行可达性分析时,会识别并标记这些不可达对象。

4,收集阶段(Collected)

(1)垃圾回收器检测到对象不可达后,会在某个合适的时机回收这些对象占用的内存空间

(2)在大多数垃圾回收器中,这通常意味着对象会被放入待回收集合中,等待下次垃圾回收周期将其清除

5,终结阶段(Finalized)

(1)在某些情况下(尤其是对象即将被垃圾回收前),若对象实现了 finalize() 方法,JVM会在回收对象前调用这个方法,给予对象最后一次自我清理的机会

(2)注意,finalize() 方法并不保证一定会被执行,且不应用于依赖其执行关键清理操作

6,对象空间重分配阶段(De-allocated)

(1)在对象的 finalize() 方法(如果有)执行完毕后,垃圾回收器正式释放对象所占用的内存空间,将其归还给内存池。

(2)当这部分内存重新分配给新的对象时,可能会经过内存碎片整理的过程

今天的分享就到这了,每日提升一点,一起变得更强!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值