public class Tahiti { Tahiti t; public static void main(String[] args) { Tahiti t = new Tahiti(); Tahiti t2 = t.go(t); t2 = null; System.out.println(t2); } Tahiti go(Tahiti t) { Tahiti t1 = new Tahiti(); Tahiti t2 = new Tahiti(); t1.t = t2; t2.t = t1; t.t = t2; return t1; } } 问题是此过程一共有多少个对象满足垃圾回收的条件? |
|
是因为go方法里t2.t还有这个对象的引用? |
|
10分 |
是因为 t.t=t2; t2.t=t1; 而这个t,在main方法里还是有引用的。 |
10分 |
总共new了三个对象 t持有了t2 t2持有了t1
所以三个对象都不会被回收 |
我觉得这是很奇葩的问题,八成是面试官装B用的。 虚拟机进程都结束了还不回收?
<<深入理解Java虚拟机>> 对与垃圾回收机制将的很详细。 |
|
楼上说得对,产生几个对象就回收几个。
|