Java 在列表上运行remove(int-index)方法以移除对象实例是否会调用垃圾收集?

Java 在列表上运行remove(int-index)方法以移除对象实例是否会调用垃圾收集?,java,android,object,arraylist,garbage-collection,Java,Android,Object,Arraylist,Garbage Collection,我正在Android上编写一个应用程序——其中一部分涉及屏幕上的一些敌人。这些都包含在ArrayList中。 我的代码确定敌方类的实例是否在屏幕外。如果是这样,则需要删除对象的实例以保留资源,因为这些资源可以以相当高的速率生成。我目前调用 remove(int index) 方法从列表中删除元素。这也会导致元素上的垃圾收集吗?如果没有,我如何确保垃圾收集(或者不值得吗?) 如果是这样,则需要删除对象的实例以保留资源,因为这些资源可以以相当高的速率生成 更有可能的是,它需要维护这些对象的一部分

我正在Android上编写一个应用程序——其中一部分涉及屏幕上的一些敌人。这些都包含在ArrayList中。 我的代码确定敌方类的实例是否在屏幕外。如果是这样,则需要删除对象的实例以保留资源,因为这些资源可以以相当高的速率生成。我目前调用

remove(int index) 
方法从列表中删除元素。这也会导致元素上的垃圾收集吗?如果没有,我如何确保垃圾收集(或者不值得吗?)

如果是这样,则需要删除对象的实例以保留资源,因为这些资源可以以相当高的速率生成

更有可能的是,它需要维护这些对象的一部分,以“保留资源”,如果“这些对象可以以相当高的速率生成”

这也会导致元素上的垃圾收集吗

否。垃圾收集通常是异步执行的。一旦不再引用对象,该对象将有资格进行垃圾收集,但删除引用不会导致垃圾收集

如果没有,我如何确保垃圾收集


你没有。

这不值得。Android将为您调用GC。删除的对象最终将被垃圾回收;何时或如何发生这种情况取决于JVM。您提到了对象池模式,这很好。如果游戏很简单,你只需要繁殖敌人,给他们x,y,deltaX,deltaY值,让他们离开屏幕,只需重置x,y和(可选)修改这些delta就可以解决问题。@mafagafogigante:同意。正是因为这个原因,对象池在游戏开发中很流行。Android在其他领域也使用了它们(例如,
SensorEvent
对象池)。实际上,我非常喜欢对象池的想法。我们一定会实施。