老师这里的程序次序问题

来源:7-5 Java垃圾回收之常见面试题

厥~~~

2019-10-19

f=null;
System.gc();
假设f原先指向的地址为A,现在指向了null。我们再调用System.gc()才会触发finalize()
但是finalize()方法内部有个finalization=this;视频里说的是把原先的地址给了finalization。但是此时this应该就是f,f已经指向了null。在单线程环境下不应该this=null,然后finalization=null么。根据happens-before原则。

写回答

1回答

翔仔

2019-10-20

同学好,finalize()方法相当于给对象一次复活的机会,它里面就是要对被回收的对象进行处理,而this跟置为空的finalization变量不是一个东西,finalization变量虽然被置为空了,只是改变了它的地址,但是它原先指向的Finalization对象在没完成回收前还在,还能被finalize()方法用到,否则finalize方法就没意义了呢。这个跟hapens-before没有必然联系,或者说并没有违背

1
3
慕少1113164
回复
翔仔
非常感谢老师解答!
2020-08-09
共3条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程