我正在做一個2D射擊遊戲,在那裏你可以射擊敵人,它會爆炸。這是我的渲染方法:設置變量爲null時iterator.remove()
public void renderEnemies(Graphics2D g) {
for (Iterator<Enemy> it = enemies.iterator(); it.hasNext();) {
Enemy enemy = it.next();
enemy.render(g);
if (enemy.die) { // die
it.remove();
playSound(4);
corpses.add(new Corpse(1, enemy.x, enemy.y));
currentEnemyLife = 0;
}
if (enemy.x < 0) { // out of screen
if (!enemy.die) {
hero.LIFE--;
}
it.remove();
currentEnemyLife = 0;
}
}
}
嗯,我想要做的是,設置輾轉空的敵人,所以垃圾收集可以從JVM中刪除。當我執行it.remove();
時,我試圖添加enemy = null;
。但它似乎只是刪除我使用it.next();
創建的變量enemy
,而不是實際的敵人。 我用來增加敵人的方法是enemies.add(new Enemy());
。
我使用Runtime.getRuntime().totalMemory()
檢查了內存,並一直增加到最大值,遊戲崩潰。
你不必設置enemy = null,1.估計最大內存是多少? 2.可能你有另一個敵人的參考(如果這個問題),嘗試檢查從java堆 –
對象的數量(通過他們的類型),最大內存是259522560,我沒有任何參考敵人。 –
你會得到更多的信息,爲什麼你使用內存分析儀內存不足 –