【Java】这么简单的对象生命周期你都不会?

对象的生命周期

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

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

1

创建阶段

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

创建的过程

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

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

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

创建一个对象的注意点

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

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

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

2

应用阶段

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

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

四种引用:

  1. 强引用

  2. 软引用

  3. 弱引用

  4. 虚引用

3

不可视阶段

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

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

4

不可达阶段

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

5

可收集阶段

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

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

6

终结阶段

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

7

释放阶段

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

最后

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

 

 

posted @ 2020-06-22 13:05  程序员徐小白  阅读(95)  评论(0)    收藏  举报