当前位置: 首页 > 知识库问答 >
问题:

如何在给定程序中确定符合垃圾收集条件的对象?

章涵蓄
2023-03-14

鉴于:

 public class Trees {
    Trees t;

    public static void main(String[] args) {
        Trees t = new Trees();
        Trees t2 = t.go(t);
        t2 = null;
        // more code here : LINE 11
    }

    Trees go(Trees t) {
        Trees t1 = new Trees();
        Trees t2 = new Trees();
        t1.t = t2;
        t2.t = t1;
        t.t = t2;
        return t1;
    }
}

当到达第11行时,有多少对象符合垃圾收集条件?

共有3个答案

汪栋
2023-03-14

根据您的代码片段,当控件到达“第11行”时,不能对任何对象进行GCed。

原因:

  • t 是一个字段,因此现在不能进行GCed
  • 调用go后,t2将等于null。然而,在方法go中,每个t1t2指向另一个,加上字段t指向其中一个。因此,由于参考链,任何对象都不能进行GCD:

t-

t2-

邵正雅
2023-03-14

可以创建三个对象:

Object "a": Trees t = new Trees();
Object "b": Trees t1 = new Trees();
Object "c": Trees t2 = new Trees();

在第11行,它们都不符合垃圾收集的条件,因为变量t(在main中声明)仍然有对对象“a”的引用,并且“b”和“c”都可以从“a”到达。

葛承德
2023-03-14

这个链接显示了一个例子以及如何绘制图表

http://radio.javaranch.com/corey/2004/03/25/1080237422000.html

 类似资料:
  • 问题内容: 这个问题来自Kathy Sierra SCJP 1.6 。有多少对象可以进行垃圾收集? 根据Kathy Sierra的回答,它是。这意味着两个对象可以进行垃圾回收。我已经给出了答案的解释。 但是,为什么不符合垃圾收集(GC)的条件? 何时到达,有多少对象可以使用GC? 答:0 B:1 C:2 D:编译失败 E:不可能知道 F:在运行时引发异常 回答: C是正确的。仅一个CardBoar

  • 这个问题取自凯西·塞拉SCJP 1.6。有多少对象符合垃圾收集的条件? 根据凯西·塞拉的回答,它是。这意味着有两个对象可以进行垃圾收集。我已经解释了答案。但是为什么不符合垃圾收集(GC)的条件呢? 当到达时,有多少对象符合GC条件? A:0 答复: C是正确的。只有一个硬纸板对象(c1)符合条件,但它有一个关联的wrapper对象也符合条件

  • 问题内容: 输入以下代码: 问题是,之前有多少对象可以进行垃圾回收。 那么正确的答案是(至少那是面试官的答案): 2- 布尔值,因为它是包装器和。 您能请我解释一下为什么并且没有被垃圾收集吗? 稍后编辑: 好吧,我想我明白了。起初有点令人困惑,但现在我确信面试官是错的。我最初的错误是,起初我不认为Java仅通过值传递,因此不可能从以“ a2”为参数的函数内部使a2为null,因为a2实际上是a2的

  • 当Tester类的主方法结束时,有多少对象符合垃圾收集的条件?我的印象是答案是两个,尤其是a1,b1。然而,我找到了一个正确的答案,那就是只有一个对象是合格的。我认为,由于我们没有将b1指定为a2中的成员变量,b1在主要结束之前被分配为null,所以应该由垃圾收集器收集。什么是真的?

  • 是否可以通过编程方式找出有多少对象符合垃圾收集的条件并打印出它们的数量?

  • 何时单链表中的节点符合垃圾回收机制? 如果单链表中有一个节点是最后一个元素,那么它的下一个指针将指向null。如果假设最后一个元素中的数据也是null。在这种情况下,数据和下一个指针都是空的。这个元素是否符合垃圾回收机制?