java里 一个对象的finalize()自动被调用的时候 该对象是不是被回收了

 我来答
百度网友9c743b7
推荐于2017-11-25 · TA获得超过925个赞
知道小有建树答主
回答量:360
采纳率:100%
帮助的人:314万
展开全部
一个对象被判定符合GC条件以后,在GC之前finalize()方法会被调用,所以基本可以说其被回收了。
但是有种特殊情况:就是在finalize()中重新让对象不符合GC条件,这样对象就避开了一次GC,这时对象就没有被回收,下次对象再次符合条件的时候finalize()也不会被调用,但是它还是被回收了
ps:finalize()只能被调用一次
更多追问追答
追问
哦  那我还想问下   咋样叫互相引用  听别人说2个对象互相引用  对象就不能被回收    
如果我这样写
Class A{
C cc;
public A(C c)
{
cc=c;
B b=new B(cc )
}

}

那对象B被置null的时候 会不会被回收 这样算不算互相引用
追答
对象什么时候被回收是不确定,对象就算符合回收的条件,也不是说立刻就开始回收的,什么时候回收是JVM决定的。所以只能说B被置null的时候它符不符合GC条件。
GC的判定:无活线程可达既判定有效
孤岛对象可以被GC,即使他们互相指向对方,所以互相引用应该是能被回收的,你那句话在哪听说的。
如果单纯的B被置null,b应该是符合GC条件的,但是通过A可以访问C的对象,C应该不符合
还有你最好用System.gc()去提议gc不然程序正常结束也不保证finalize()会被执行的。
abcd880129
2012-08-01 · TA获得超过216个赞
知道小有建树答主
回答量:479
采纳率:0%
帮助的人:220万
展开全部
finalize()在什么时候被调用?
有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候.
2.程序退出时为每个对象调用一次finalize方法。
3.显式的调用finalize方法
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式