龙空技术网

「Java」带你了解一个对象从出生到死亡

程序员徐小白 178

前言:

如今你们对“java对象生命周期”大体比较关心,大家都想要分析一些“java对象生命周期”的相关知识。那么小编也在网上收集了一些有关“java对象生命周期””的相关资讯,希望看官们能喜欢,你们一起来了解一下吧!

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

对象的生命周期

Java对象在JVM中的运行周期大致上分为七个阶段,创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段(Free)

用了那么久的Java对象,怎么可能不把它的生命周期搞清楚嘞?下面我将对每个阶段进行介绍

创建阶段

一个对象想要进入创建阶段,前提是它的类文件必须已经加载到内存中,并且创建了Class对象,这样才能根据类信息进行创建

创建的过程:

为对象在堆中分配内存空间

构造对象。从最顶层父类开始对局部变量赋值

从最顶层的父类开始往下调用构造方法

创建一个对象的注意点:

不要在循环中创建对象。避免反复创建带来的消耗

不要让类的继承关系太深。避免递归调用父类方法带来的消耗

创建完成之后就会进入应用阶段

应用阶段

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

这里可以看一下我的这一篇文章:Java(九)Java中有四种引用你知道吗?

四种引用:

强引用

软引用

弱引用

虚引用

不可视阶段

不可视阶段中,对象是存在且被引用的,但是这个引用在接下来的代码中并没有使用到(也可能是因为作用域限制了),这就造成了内存的冗余。

所以我们在使用完一个对象之后,或者这个对象就在这个作用域内,那就要在结束的时候,将该对象的引用改成null,让JVM及时回收这个对象

不可达阶段

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

可收集阶段

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

收集阶段紧接着就是终结阶段

终结阶段

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

释放阶段

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

最后

以上就是对象生命周期的整个过程,如果想了解类的生命周期可以去看我的这一篇文章【JVM】一篇文章让你彻底了解类加载器

——————————————————————————————

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

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

未经允许,不得转载!

标签: #java对象生命周期