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

273 阅读3分钟

这是我参与更文挑战的第12天,活动详情查看:更文挑战

对象的生命周期

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

创建阶段

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

应用阶段

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

这里可以看一下我的这一篇文章 四种引用: 强引用 软引用 弱引用 虚引用

不可视阶段

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

不可达阶段

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

可收集阶段

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

终结阶段

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

释放阶段

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

最后

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

—————————————————————————————— 你知道的越多,不知道的越多。

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

未经允许,不得转载!

微信搜【程序员徐小白】,关注即可第一时间阅读最新文章。回复【面试题】有我准备的50道高频校招面试题,以及各种学习资料。