2 回答
TA贡献1834条经验 获得超8个赞
几乎可以肯定,程序将在 GC 运行之前完成。所以......从技术上讲......没有垃圾收集。
类似地,当main方法完成时,它创建的所有对象都将无法访问并且有资格被垃圾收集。(即使程序没有终止。)
但是,当您到达 print 语句时,该company对象将是可访问的,并且其toy字段将是可访问的,因此该字段的值将是可访问的......并且ToyCar它所引用的对象不会被垃圾收集,无论是那时 GC 还没有运行。
一般规则是,如果您的应用程序可以访问一个对象,它就不会被垃圾回收。基本上,不用担心。如果您的代码可以使用该对象,该对象仍将存在。
TA贡献1827条经验 获得超4个赞
这里这三行代码构造了三个不同的新对象ToyCar
cars[0] = new ToyCar();
cars[1] = new ToyCar();
cars[2] = new ToyCar();
执行完这两行代码
cars[0] = null;
cars[1] = null;
前两个汽车对象将有资格进行垃圾收集。因为 JVM 中不存在对该对象的外部引用。
现在来到这条线
ToyShop company = new ToyShop();
company.setToyCar(cars[2]); //now car object at 2ond Index have external ref.
这里第三个对象引用被分配给toyCar作为成员变量存在的引用变量company。
因此,在执行 line 之后,cars = null;仍然存在一个外部引用JVM。
因此,只有 2 个对象在执行cars = null;.
添加回答
举报
