在我的示例代码中,哪些Test
对象在执行结束时有资格进行垃圾回收?
interface Animal1
{
void makeNoise();
}
class Horse implements Animal1
{
Long weight = 1200L;
@Override
public void makeNoise()
{
System.out.println("Whinny");
}
}
public class Test extends Horse
{
public void makeNoise()
{
System.out.println("wginny");
}
public static void main(String str[])
{
Test t1 = new Test();
Test t2 = new Test();
Test t3 = new Test();
t3 = t1;
t1 = t2;
t2 = null;
t3 = t1;
}
}
答案 0 :(得分:1)
Test t1=new Test();
Test t2=new Test();
Test t3=new Test();
t3=t1;
t1=t2;
t2=null;
t3=t1;
答案是t3和t1。 t2仍然有一个存储在t1中的引用,然后存储到t3中。为t1和t3创建的原始对象有资格进行垃圾回收,因为它们不再具有强引用,因为不同的值保存在它们中。一个很好的心理锻炼,但这可能是你刚才复制粘贴的作业。
一旦对其封闭物体的强烈引用消失,那些长号都有资格进行垃圾收集。
或者,如果您的应用程序退出,则所有对象都有资格进行垃圾回收。
答案 1 :(得分:0)
不确定这是否是您要求的,但我算是6。
1: Test t1 original value
2: Test t2 original value
3: Test t3 original value
4: Long t1.weight (autoboxed. not flyweighted because of the high value)
5: Long t2.weight (autoboxed. not flyweighted because of the high value)
6: Long t3.weight (autoboxed. not flyweighted because of the high value)
请注意,所有调用的方法只会分配1个飞加的字符串。字符串是不可改变的& Java会分享这些引用。