Java 对象 的 生命周期 与 可达级别

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yichen97/article/details/95395529

对象的生命周期还好理解,就像是人的一生,从出生、少年、青年、中年、老年、死亡;

关于对象,可达性可以理解为根据引用类型的不同而被分成了不同的可达等级。

该篇只是对生命周期和可达级别做一个了解,目的是为了在以后读其他有关于JVM、对象、引用等类型的文章更容易理解。

该篇与四种引用方式连接较为紧密。

生命周期

1. 创建阶段

分配存储空间;

构造对象;

从超类对子类、对static成员进行初始化;

超类成员变量按顺序进行初始化,递归调用超类构造方法;

子类成员变量按顺序初始化;子类构造方法调用。

2. 应用阶段

对象至少被一个强引用持有着,软引用、弱引用get出之后也为强引用。

3. 不可见阶段

对象的执行已经超出了该对象的作用域。

比如说超出了该方法的一个局部变量,外部已经无法拿到。

4. 不可达阶段

该对象已经不被任何强引用所持有。

5. 可收集阶段

垃圾回收器这是候发现该对象已经处于“不可达阶段”,且已经做好了对该对象的内存空间重新分配的准备。

6. 终结阶段

等待垃圾回收对该对象进行回收。

7. 对象空间重新分配阶段

垃圾回收器对该对象所占用的内存空间进行了回收或再分配,这时候,该对象也就彻底消失了。

可达级别

1. 强可达

一个对象可以被一些线程直接使用而不用通过其他引用对象。

比如一个对象对于所创建它的线程来说就是强可达对象。

2. 软可达

一个对象没有强可达性,但是可以通过软引用来使用,则它具备软可达性。

当内存不足时,会回收软可达对象。

3. 弱可达

一个对象既没有强可达性,也没有软可达性,但它可以通过弱引用使用,那么该对象具有弱可达性。

当每次GC操作,弱可达对象就会被回收。

4. 虚可达

一个对象既没有强可达性,也没有软可达性、弱可达性,已经被finalized掉,但他有虚引用指向它,那它具有虚可达性。

虚引用所指向的对象不能被取回使用,使用虚引用的作用就是为了得知对象被GC的时机,所以可以利用虚引用来进行销毁前的一些操作,比如说资源释放等。

5. 不可达

一个对象不能通过以上任何方式引用,该对象就具有不可达性。

该状态下的对象应该被回收掉。

参考文献

https://blog.csdn.net/oncealong/article/details/51455650

https://www.jianshu.com/p/86efa167a627

https://www.jianshu.com/p/72a0e26d35bc

猜你喜欢

转载自blog.csdn.net/yichen97/article/details/95395529
今日推荐