安卓游戏 - 如何存储游戏元素,所以gc不会开火

时间:2011-06-07 15:00:16

标签: android garbage-collection arraylist

我正在开发一款安卓游戏,我有一个关于存储游戏元素而不会发射垃圾收集器的问题。

我的游戏需要一个集合,其中游戏元素根据x,y位置存储(所有游戏元素都有x,y,宽度和高度)。然后每帧调用该集合以根据cameraX,cameraY,相机宽度和高度(用户可以在游戏周围滚动)来回溯元素。

示例:

 function draw() {
   tmp = collection.getElements(tmp,cameraX,cameraY,cameraWidth,cameraHeight);
     for(int i = 0; i < tmp.size(); i++) {
        tmp.get(i).draw();
     } 
  }

我目前正在使用Vector类来表示集合元素,但gc每隔几分钟就会持续触发。我事先做了所有的分配。我还修改了getElements函数以接受另外一个参数 - 临时向量(预先分配),其中填充了元素然后返回。

  • 用哪个类来存储游戏元素,这样gc就不会开火了(如果可能,我更喜欢)?
  • 我还在运行时向集合添加元素,我是否还必须事先分配它们?

谢谢,

关心J.

2 个答案:

答案 0 :(得分:0)

  1. 如果您有对象的引用,GC将不会收集它们。因此,如果您在游戏过程中没有创建对象(并释放它们),那么GC将永远不会释放内存
  2. 如果您需要预先创建元素取决于元素的类型。如果他们必须从文件系统中读取数据,则应在引导/加载序列之前加载它们。如果它们很简单,你可以在第一次需要时这样做

答案 1 :(得分:0)

每隔几分钟可能不是一个值得担心的问题,当它触发时你会得到明显的帧速率下降吗?另一种选择是在方便的时候调用System.gc()。