为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的数组垃圾收集

Java中的数组垃圾收集

皈依舞 2022-05-21 19:52:24
我有2节课。玩具车玩具店ToyShop 有一个toyCar接受ToyCar对象的字段。public static void main(String[] args) {  ToyCar[] cars = new ToyCar[3];  cars[0] = new ToyCar();  cars[1] = new ToyCar();  cars[2] = new ToyCar();  ToyShop company = new ToyShop();  company.setToyCar(cars[2]);  cars[0] = null;  cars[1] = null;  cars = null;  print(company.getToyCar())}如果我运行程序,汽车数组会被垃圾收集,还是只收集汽车[0]和汽车[1]?toyCar如果阵列被垃圾收集,我可以在公司打印出来吗?如果我的问题没有意义,请指出。
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

几乎可以肯定,程序将在 GC 运行之前完成。所以......从技术上讲......没有垃圾收集。

类似地,当main方法完成时,它创建的所有对象都将无法访问并且有资格被垃圾收集。(即使程序没有终止。)

但是,当您到达 print 语句时,该company对象将是可访问的,并且其toy字段将是可访问的,因此该字段的值将是可访问的......并且ToyCar它所引用的对象不会被垃圾收集,无论是那时 GC 还没有运行。

一般规则是,如果您的应用程序可以访问一个对象,它就不会被垃圾回收。基本上,不用担心。如果您的代码可以使用该对象,该对象仍将存在。


查看完整回答
反对 回复 2022-05-21
?
GCT1015

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;.


查看完整回答
反对 回复 2022-05-21
  • 2 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号