【Java】带你了解一个对象从出生到死亡

8384f333-4a6e-4c52-bdcd-84244d38de02.jpg

对象的生命周期

Java对象在JVM中的运行周期大致上分为七个阶段,创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段(Free)
用了那么久的Java对象,怎么可能不把它的生命周期搞清楚嘞?下面我将对每个阶段进行介绍

创建阶段

一个对象想要进入创建阶段,前提是它的类文件必须已经加载到内存中,并且创建了Class对象,这样才能根据类信息进行创建
创建的过程:
为对象在堆中分配内存空间
构造对象。从最顶层父类开始对局部变量赋值
从最顶层的父类开始往下调用构造方法
创建一个对象的注意点:
不要在循环中创建对象。避免反复创建带来的消耗
不要让类的继承关系太深。避免递归调用父类方法带来的消耗
创建完成之后就会进入应用阶段

应用阶段

引用阶段就是这个对象发挥价值的阶段,通俗点说,就是这个对象有被使用、有被其他对象引用

这里可以看一下我的这一篇文章

四种引用:
强引用
软引用
弱引用
虚引用

不可视阶段

不可视阶段中,对象是存在且被引用的,但是这个引用在接下来的代码中并没有使用到(也可能是因为作用域限制了),这就造成了内存的冗余。
所以我们在使用完一个对象之后,或者这个对象就在这个作用域内,那就要在结束的时候,将该对象的引用改成null,让JVM及时回收这个对象

不可达阶段

当一个对象没有在被强引用时,就会进入不可达阶段,在这个阶段中,对象随时会被回收,这由JVM中的垃圾回收器来决定

可收集阶段

当对象到了不可达阶段后,垃圾处理器也做好了对该对象的内存空间重新分配的准备,那么就会进入到收集阶段,如果对象重写了finalize()方法,则会去执行finalize()方法,尽量不要重写finalize()方法,避免影响垃圾回收器的回收和让对象重新回到应用阶段
收集阶段紧接着就是终结阶段

终结阶段

到了终结阶段,对象就不可能再回到应用阶段了,只能等待被垃圾回收期回收

释放阶段

这是垃圾回收的最后一步了,也是对象死亡的阶段,此时的对象所占用的内存空间已经被回收或者重新分配了,对象也不存在了

最后

以上就是对象生命周期的整个过程,如果想了解类的生命周期可以去看我后续的文章
——————————————————————————————
你知道的越多,不知道的越多。

如果本文章内容有问题,请直接评论或者私信我。如果觉得写的还不错的话,点个赞也是对我的支持哦

未经允许,不得转载!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容