1

不久前,我在 Android 平台上发布了一款完全用 Java 编写的游戏。目前我正在努力获得尽可能多的性能。在我的游戏案例中,问题似乎是我在可能更适合ArrayList的地方更频繁地使用容器。Map为了解释自己,我这样做是因为我害怕会在幕后触发的动态内存分配( Android 上的Map/Tree结构)。也许在我不知道的 Android/Java 平台上有某种结构,它将为我提供快速的搜索结果,并且在添加新元素时不会动态分配额外的内存?

更新:例如,我使用 ArrayList 结构来保存我游戏的大部分粒子。当然,独立(不是按顺序)删除它们是一件很痛苦的事情,因为系统需要遍历整个容器才能删除一个实体对象(当然是在最坏的情况下)。

4

2 回答 2

1

除非您特别发现这是一个问题,否则我不会担心由于内存分配而导致的减速。内存分配并不是真正导致 Android 游戏速度变慢的原因,通常是 GC 运行时出现问题。除非您经常在 Map 中插入和删除,否则您可能不必担心分配问题。

更新:

您可能不想使用贴图,而是考虑在不再需要粒子时将它们标记为“死”,并使用该标志在更新迭代中跳过它们。将死粒子的引用存储在一个新的 deadParticles ArrayList 中,当您需要一个新粒子时,只需从该列表中取出一个即可。这样,您可以在需要时立即访问粒子。

于 2012-07-21T21:30:31.150 回答
0

您是否在预分配元素对象,并重用空对象而不是分配新对象?

于 2012-07-21T21:24:05.513 回答