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

符合垃圾收集条件的对象

裴焱
2023-03-14

这个问题取自凯西·塞拉SCJP 1.6。有多少对象符合垃圾收集的条件?

根据凯西·塞拉的回答,它是C。这意味着有两个对象可以进行垃圾收集。我已经解释了答案。但是为什么c3不符合垃圾收集(GC)的条件呢?

class CardBoard {
    Short story = 200;
    CardBoard go(CardBoard cb) {
    cb = null;
    return cb;
}

public static void main(String[] args) {
    CardBoard c1 = new CardBoard();
    CardBoard c2 = new CardBoard();
    CardBoard c3 = c1.go(c2);
    c1 = null;
    // Do stuff
} }

当到达//Do stuff时,有多少对象符合GC条件?

  • A:0

答复:

  • C是正确的。只有一个硬纸板对象(c1)符合条件,但它有一个关联的Shortwrapper对象也符合条件

共有3个答案

纪秋月
2023-03-14

c3null,因此显然没有Object符合垃圾回收机制。

请注意,只创建了两个CardBoard对象,这两个在以下行:

CardBoard c1 = new CardBoard();
CardBoard c2 = new CardBoard();

在参考文献的杂耍之后,只有一个没有参考文献。

潘振国
2023-03-14

不存在c3指向的对象。构造函数只被调用了两次,两个对象,一个由c1c2指向c3只是一个引用,除了空指针,它从未被分配过任何东西。

当前指向null的引用c3,不会超出范围并从堆栈中移除,直到主方法末尾的右括号被交叉。

最初分配给c1的对象无法访问,因为c1引用设置为空,但c2引用尚未更改,因此分配给它的对象仍然可以通过c2引用从此范围访问。

洪河
2023-03-14

让我们逐行分解:

CardBoard c1 = new CardBoard();

我们现在有两个对象,硬纸板c1指向和c1。故事。这两种方法都不适用于GC,因为c1指向CardBoardCardBoard变量的story指向Short。。。

CardBoard c2 = new CardBoard();

与上面类似,我们现在有四个对象,没有一个可用于GC。

CardBoard c3 = c1.go(c2);

我们调用由c1指向的CardBoard上的方法go,传递c2的值,该值是对CardBoardObject的引用。我们使参数为空,但Java值传递意味着c2变量本身不受影响。然后我们返回空参数。c3nullc1c2不受影响。我们仍然有4个对象,其中没有一个可以被GC'd。

c1 = null;

我们为nullc1。之前指向的CardBoard对象现在没有指向它的任何内容,并且它可以是GC'd。因为该CardBoard对象中的故事变量是唯一指向简短的对象,并且因为该CardBoard对象有资格获得GC,因此简短也有资格获得GC。这就给出了4个对象,其中2个可以是GC'd。有资格获得GC的对象是以前由c1c1.story引用的对象。

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

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

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

  • 给定以下代码,在main()中创建了多少对象,在执行第15行之后,有多少对象符合垃圾回收机制? 3个已创建,0个符合条件 4个已创建,1个符合条件 5个创建,2个符合条件 3个已创建,2个符合条件 以上都不是 好的,首先,请不要把它标记为家庭作业。这是我大学的一个测试题。根据我的说法,应该有两个创建的对象,第15行之后有一个符合垃圾收集的条件。这是因为只有两个新的操作符用于创建对象,而“d”在开始

  • 有人能给我解释一下原因吗?

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