永发信息网

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

答案:2  悬赏:0  手机版
解决时间 2021-03-21 07:30
java里 一个对象的finalize()自动被调用的时候 该对象是不是被回收了
最佳答案
一个对象被判定符合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()会被执行的。追问那么就是说 如果我
Class A{
C cc;
public A(C c){
......
}
}

Class C{
public C(A a){
A a=newA (this);

}
}

这样写的话 在C里把A置空的 话 A是不会被回收的吧追答GC是自动的,学习的目的考试大于应用,那么考试就要知道一些概念,像你这样深究没有多大意思。再说你这代码是类的定义,你能实际建立起来A或者C的对象么?追问呵呵 我这人就这样 谢谢 了 主要是我再写个项目 用的机子内存很小 所以保证 内存够用 对着方面没啥研究 怕 要是内存没被回收 内存溢出就郁闷了
全部回答
finalize()在什么时候被调用?
有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候.
2.程序退出时为每个对象调用一次finalize方法。
3.显式的调用finalize方法
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
最合适喝酒的菜是什么
谁能告诉我镍升贴水是什么意思?
X752/皇庄大街(路口)我想知道这个在什么地方
川乌附子干姜炙草各60g服后仍然四肢逆冷
人的自我意识为什么不受身体物质更新的影响?
实验车是什么?
安卓手机版勇者斗恶龙3 秘籍是什么
如何知道一个女人是否打过胎?
开粗,二粗怎么放好余量?
唐山大地震时间
1992年1月5号12:30分八字是什么
振动器能用于哪些地方?
长城哈弗H3柴油车早晨不好启动什么原因
山西,太原市,哪里有好吃的鱼,鱼火锅也可,
如图,小明把一块含60°角的三角板绕60°角的
推荐资讯
下巴长痘痘怎么回事
魅族por5通知栏中∞是什么意思
谁有印度电影 拯救爱情1和2内嵌字幕版?
You have failed to do what you to and I’
听说上海喜美做鼻子不错,有谁在那边做过没,
喝酒吐了难受怎么办
怎么查检察院组织机构代码
alizee 歌曲 you pi dou是中文意思是什么?
男友说喜欢归喜欢,能不能以后在-起生活还不好
考研考本校还是外校
在下列事件中,必然事件的是A.若a、b、c都是
如图,先将甲容器注满水,再将水倒入乙容器,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?