本片文章取自《Android进阶解密》
在java对象被类加载器加载到虚拟机中后,java对象在java虚拟机中有7个阶段
1.创建阶段(created)
步骤:
(1)为对象分配存储空间
(2)构造对象
(3)从超累到子类对static成员进行初始化
(4)递归调用超类的构造方法
(5)调用子类的构造方法
2.应用阶段(In use)
当对象被创建,并分配给变量赋值时,状态就切换到了应用阶段。这一阶段的对象至少具有一个强引用,或是显式的使用软引用、弱引用或者虚引用
3.不可见阶段(invisible)
在程序中找不到对象的任何强引用,比如程序的执行已经超出了该对象的作用域。在此阶段,对象仍可能被特殊的强引用GC Roots持有者,比如对象被本地方法栈中jni引用或被运行中的线程引用等
4.不可达阶段(Unreachable)
在程序中找不到对象的任何强引用,并且垃圾收集器发现对象不可达
5.收集阶段(collected)
垃圾收集器已经发现对象不可达,并且垃圾收集器已经准备好要对该对象的内存空间重新进行分配,这个时候如果该对象重写了finalize方法,则会调用该方法
6.终结阶段(Finalized)
在对象执行完finalize方法后,任然处于不可达状态时,或者对象没有重写finalize方法,则该对象进入终结阶段,并等待垃圾收集器回收该对象空间
7.对象空间重新分配阶段(deallocated)
当垃圾收集器对对象的内存空间进行回收或者再分配时,这个对象就会彻底的消失