我對如何利用Java的垃圾回收來處理不再使用的對象實例有點困惑。我有幾個問題:有關類實例的Java垃圾回收
在我的比賽,我產生大炮沒有一個變量存儲它們像這樣:
new Cannon("down", tileX, tileY, 65);
將這個對象永遠是符合垃圾收集?如果是,那麼它什麼時候纔會真正被處置?
==
對於我的炮班,我所有的實例添加到在創建靜態數組列表。這是我在使用垃圾收集第一次嘗試:
ArrayList<Cannon> cannonList = Cannon.getCannons();
for (int i = 0; i < cannonList.size(); i++) {
Cannon c = (Cannon) cannonList.get(i);
c = null;
}
for (int i = 0; i < cannonList.size(); i++) {
cannonList.remove(i);
}
System.gc();
當我設置爲「C = NULL;」,它使原來炮爲「空」,從而使其符合垃圾收集,或者它爲對象創建一個新的引用c,然後將其設置爲null,使它對我無能爲力?
==
我的炮班不斷創建EnemyProjectile類的實例。 EnemyProjectiles類包含一個名爲「visible」的布爾型字段。當「可見」等於假時,處理我的EnemyProjectile類並使其有資格進行垃圾回收的正確方法是什麼?
對象在不再有任何引用之後會被回收一段時間。基本方案是「標記和掃描」,其中一個程序首先「將」對象A的點「對象B」的整個「樹」移動到對象C ...處,「標記」每個對象到達。然後檢查所有對象,並將那些未標記爲可達的對象回收。 –
_「它是否爲對象創建了一個新的引用c,然後將它設置爲null,使它對我而言什麼都不做?」_對它沒有任何幫助。從列表中刪除一個項目,並且(大概)不再提及它是什麼使它符合GC的條件。 – Radiodef