我正在做一个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,我没有任何参考敌人。 –
你会得到更多的信息,为什么你使用内存分析仪内存不足 –