对象的生命周期

来源:互联网 发布:淘宝女包2017新款上市 编辑:程序博客网 时间:2024/05/16 07:41

对象的生命周期

在我们一般的编码过程中,对象的创建一般是这样的:

//第1步:Duck myduck 声明引用变量//第2步:new Duck()  创建Duck对象//第3步:=           连接对象Duck与引用myduckDuck myduck = new Duck();

我们都知道java中有GC(垃圾回收机制),当一个对象不再使用时,它所占用的空间将被回收,并重新分配使用。于是,我们不禁会问:一个对象它能存活多久呢?什么情况下,它才可能被GC回收?

对象的生命周期完全取决于引用,只要关联的引用还活着,那么对象也将继续活在堆(heap)上。如果引用都“消亡”了,那么对象也将跟着“陪葬”。(此处并不是说,对象马上就会GC回收,此时只能说是它符合垃圾收集器的回收条件,至于何时被回收,我们不用太关心。一般在内存不足,GC会主动去回收部分或全部的可回收对象。)

引用的生命周期又分两种情况:
1. 如果引用是局部变量,那么它存活在声明该变量的方法里。一旦该方法调用结束(从方法调用栈弹出),该引用变量就会消亡。
2. 如果引用是实例变量,那么它的生命周期与持有它的对象一样,只要对象还活着,该引用也就会存活下去。

既然了解了对象的生命周期及回收过程,我们在平时的编码过程中,要注意对象用完了,就要抛弃。如果保持着放,垃圾回收器也无能为力。下面是常见的3种释放对象引用的方法:

1.引用永久性的离开它的范围:

    void go(){        //z会在方法结束时消失        Life z = new Life();    }

2.引用被赋值到其他对象上:

    Life z = new Life();    z = new Life();

3.直接将引用设置为null

    Life z = new Life();    z = null;
0 0
原创粉丝点击