首先,我想说这是我正在开发的一款安卓游戏的一部分。垃圾收集器大约每三秒运行一次,这会导致我的游戏出现短暂(但明显)的延迟。我已将其缩小为我的代码中的一种方法(粘贴在下面)。当不使用这部分时,垃圾收集器大约每 11 秒运行一次,并且延迟更少。此代码是对象的一部分,该对象使用树结构来检测与对象的碰撞。对象 topLeft、topRight、bottomLeft 和 bottomRight 是相同类型的对象,它们递归地检查碰撞。我主要想知道如果每帧都运行它,这里是否有任何东西会产生大量垃圾。
public HashSet<Integer> getCollisionTiles(Rect r)
{
resetTempList();
if(topLeft!=null && topLeft.containsTiles() && Rect.intersects(r, topLeft.getBounding()))
topLeft.addCollisionTiles(tempList, r);
if(topRight != null && topRight.containsTiles() && Rect.intersects(r, topRight.getBounding()))
topRight.addCollisionTiles(tempList, r);
if(bottomLeft != null && bottomLeft.containsTiles() && Rect.intersects(r, bottomLeft.getBounding()))
bottomLeft.addCollisionTiles(tempList, r);
if(bottomRight != null && bottomRight.containsTiles() && Rect.intersects(r, bottomRight.getBounding()))
bottomRight.addCollisionTiles(tempList, r);
return tempList;
}
private void addCollisionTiles(HashSet<Integer> tList, Rect r)
{
if(level==maxLevel)
{
for(Integer i: keyListTiles)
tList.add(i);
}
else
{
if(topLeft!=null && topLeft.containsTiles() && Rect.intersects(r, topLeft.getBounding()))
topLeft.addCollisionTiles(tList, r);
if(topRight != null && topRight.containsTiles() && Rect.intersects(r, topRight.getBounding()))
topRight.addCollisionTiles(tList, r);
if(bottomLeft != null && bottomLeft.containsTiles() && Rect.intersects(r, bottomLeft.getBounding()))
bottomLeft.addCollisionTiles(tList, r);
if(bottomRight != null && bottomRight.containsTiles() && Rect.intersects(r, bottomRight.getBounding()))
bottomRight.addCollisionTiles(tList, r);
}
}