亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號