对象的生命周期
Java对象在JVM中的运行周期大致上分为七个阶段,创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段(Free)
用了那么久的Java对象,怎么可能不把它的生命周期搞清楚嘞?下面我将对每个阶段进行介绍
创建阶段
一个对象想要进入创建阶段,前提是它的类文件必须已经加载到内存中,并且创建了Class对象,这样才能根据类信息进行创建
创建的过程:
为对象在堆中分配内存空间
构造对象。从最顶层父类开始对局部变量赋值
从最顶层的父类开始往下调用构造方法
创建一个对象的注意点:
不要在循环中创建对象。避免反复创建带来的消耗
不要让类的继承关系太深。避免递归调用父类方法带来的消耗
创建完成之后就会进入应用阶段
应用阶段
引用阶段就是这个对象发挥价值的阶段,通俗点说,就是这个对象有被使用、有被其他对象引用
这里可以看一下我的这一篇文章
四种引用:
强引用
软引用
弱引用
虚引用
不可视阶段
不可视阶段中,对象是存在且被引用的,但是这个引用在接下来的代码中并没有使用到(也可能是因为作用域限制了),这就造成了内存的冗余。
所以我们在使用完一个对象之后,或者这个对象就在这个作用域内,那就要在结束的时候,将该对象的引用改成null,让JVM及时回收这个对象
不可达阶段
当一个对象没有在被强引用时,就会进入不可达阶段,在这个阶段中,对象随时会被回收,这由JVM中的垃圾回收器来决定
可收集阶段
当对象到了不可达阶段后,垃圾处理器也做好了对该对象的内存空间重新分配的准备,那么就会进入到收集阶段,如果对象重写了finalize()方法,则会去执行finalize()方法,尽量不要重写finalize()方法,避免影响垃圾回收器的回收和让对象重新回到应用阶段
收集阶段紧接着就是终结阶段
终结阶段
到了终结阶段,对象就不可能再回到应用阶段了,只能等待被垃圾回收期回收
释放阶段
这是垃圾回收的最后一步了,也是对象死亡的阶段,此时的对象所占用的内存空间已经被回收或者重新分配了,对象也不存在了
最后
以上就是对象生命周期的整个过程,如果想了解类的生命周期可以去看我后续的文章
——————————————————————————————
你知道的越多,不知道的越多。
如果本文章内容有问题,请直接评论或者私信我。如果觉得写的还不错的话,点个赞也是对我的支持哦
未经允许,不得转载!