Java对象的生命周期(转载)
转自http://blog.csdn.net/silentbalanceyh/article/details/4468368
Java里面对象的生命周期
在JVM运行空间里面,对象整个声明周期大致分为以下几个阶段:
创建阶段(Creating)->应用阶段(Using)->不可视阶段(Invisible)->不可达阶段(Unreachable)->可收集阶段(Collected)->终结阶段(Finalized)->释放阶段(Free)
【1】创建阶段:
创建过程需要经过其中几步:
为对象分配内存空间
开始构造对象
递归调用超类的构造方法
进行对象实例初始化和变量初始化
执行构造方法体
【2】应用阶段特征:
系统至少维护着对象的一个强引用(Strong Reference)
所有该对象的引用全部是强引用,除非我们显示声明了软引用、弱引用或者虚引用
【3】不可视阶段:
不可视阶段就是我们在区域代码中不可以再引用它,就是强引用已经消失,一般情况我们把这个时候的对象设置为null,其主要目的是让JVM发现它,并且可以及时回收该对象所占用资源
【4】不可到达阶段:
不可达阶段的对象,在虚拟机所管理的对象引用根集合中再也找不到直接或间接的强引用,这些对象通常是指所有线程栈中的临时变量以及相关引用,这种对象都是要预备回收的对象,但是这时候不能被GC直接回收。
【5】可收集阶段、终结阶段、释放阶段:
对象生命周期最后一个阶段,这种阶段的对象可能处于三种状态:
垃圾回收器发现对象已经不可达
finalize方法已经被执行
对象已经被重用