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

创建了多少个对象,有多少符合垃圾收集的条件?

段晨
2023-03-14

给定以下代码,在main()中创建了多少对象,在执行第15行之后,有多少对象符合垃圾回收机制?

class Test
{
    int[] dz = {1, 2, 3, 4, 5};
}

public class MarksDriver
{
    public static void main(String[] args)
    {
        Test[] da = new Test[3];
        da[0] = new Test();
        Test d = new Test();
        da[1] = d;
        d = null;
        da[1] = null;   //line 15
        //some code
    }
}
  1. 3个已创建,0个符合条件
  2. 4个已创建,1个符合条件
  3. 5个创建,2个符合条件
  4. 3个已创建,2个符合条件
  5. 以上都不是

好的,首先,请不要把它标记为家庭作业。这是我大学的一个测试题。根据我的说法,应该有两个创建的对象,第15行之后有一个符合垃圾收集的条件。这是因为只有两个新的操作符用于创建对象,而“d”在开始时引用的对象在第15行之后丢失,因此将释放内存。因此,我标记了最后一个选项,而不是上述选项。但是我的老师打错了,回答是5,2。她给了我一点不懂的解释。

有人能解释一下吗?

共有2个答案

傅浩漫
2023-03-14

创建5个,删除2个

创建了两个test对象。但是每个对象都包含一个数组对象,因此总共有四个对象。

此外,还会创建数组da。这是5个物体。

dnulled时,可以垃圾收集两个对象:d包含的数组和d本身。

......

也许老师是错的,“上面没有一个”是对的,因为基本的正确答案是6和2,因为肯定会创建第六个对象:MarksDriver对象!

姜嘉赐
2023-03-14

当我们写作时

 Test d = new Test();

创建了两个对象,一个是d,另一个是成员数组dz

和我一样

da[0] = new Test();

创建2个对象,一个存储在da[0]中,另一个是成员数组dz

还有一个对象是由

Test[] da = new Test[3];

所以总共创建了5个对象

有了这两行代码,在第13行创建的类测试的一个对象没有引用,这使得它有资格使用垃圾回收机制,这反过来也使得成员数组dz有资格使用垃圾回收机制,所以在第15行之后,2个对象有资格使用垃圾回收机制

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

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

  • 根据这个问题的答案,在第11行没有符合GC条件的对象;但是根据我的说法,至少有一个对象t2,它在第6行被设置为指向null,应该有资格进行垃圾回收。

  • 问题内容: 这个问题来自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对象也符合条件

  • 所以我不确定是0还是2。 如果有人知道请告诉我。