老师这里的程序次序问题
来源: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没有必然联系,或者说并没有违背
132020-08-09
相似问题