2020-02-08 java 对象的生命周期

java 对象的生命 周期

Created  - InUse - Invisible - Unreachable - Collected - Finalized -Deallocated

1创建阶段(Created)

创建java 对象阶段 的具体步骤 如下:

1)为对象分配存储空间

2)构造对象

3)从超类到子类对static 成员进行初始化,类的static成员的初始化在ClassLoader 加载该类时进行。

4)超类成员变量按照顺序初始化,递归调用超类的构造方法。

5)子类成员变量按照顺序初始化,一旦对象被创建,子类构造方法 就调用该对象并且为该对象进行赋值,完成后这个对象的状态就会切换到了应用阶段。



应用阶段(InUse)

对象至少被一个强应用持有,除非在系统中显示使用了软引用(Soft Reference )、弱引用

(Weak Reference) 或虚引用(Phantom Reference ).

软引用可以加速虚拟机对垃圾内存的回收速度,更可靠地维护了系统的运行安全,防止内存溢出等问题的发生。

   


不可见阶段 (Invisible)

处于不可见阶段的对象在虚拟机的对象引用根集合中再也找不到直接或者间接地强引用,这些对象一般是所有线程中的临时变量的引用。

当一个对象处于不可见阶段 ,说明程序本身不再持有该对象的任何强引用。 虽然该对象仍然存在。



不可达阶段 (Unreachable)

对象处于不可达阶段是指该对象不再被任何强引用持有,回收器发现该对象已经不可达。



收集阶段(Collected)

当垃圾回收器 发现该对象已经处于不可达阶段,并且垃圾回收器已经对该对象的内存空间重新分配做好准备,对象进入 “收集阶段” ,如果该对象已经重写了 finalize() 方法。则执行该方法进行操作。



终结 阶段 (Finalized) 

当对象执行完 Finalize()方法后仍然处于不可达状态时,该对象进入终结阶段。在该阶段,等待垃圾回收器回收该对象空间。



对象控件重新分配阶段 (Deallocated)

若垃圾回收器对该对象占用的内存空间进行回收或者再分配,则该对象彻底消失,这个阶段称为“对象控件重新分配阶段”。

你可能感兴趣的:(2020-02-08 java 对象的生命周期)