2012-07-21 106 views
1

不是最近我发布了一个完全用Java平台编写的游戏。目前,我试图尽可能多地获得性能。看来在我的游戏的情况下,问题是我更经常使用ArrayList容器在Map可能更适合的地方。为了解释我自己,我这样做是因为我害怕动态内存分配会在场景后面触发(Android上的Map/Tree结构)。也许在Android/Java平台上有某种我不知道的结构,它会为我提供快速搜索结果,并且在添加新元素时不会动态分配额外内存?Android中的地图结构和动态内存分配

更新: 例如,我使用ArrayList结构来保存大部分游戏的粒子。当然,如果系统需要遍历整个容器来删除一个实体对象(当然在最坏的情况下),那么独立地(而不是顺序地)去除它们是非常痛苦的。

+0

举一些你认为自己在错误地使用地图的例子。你可能并不需要优化你在哪里/如何思考。你有没有分析你的代码? – you786 2012-07-21 21:24:16

+0

做了分析,这就是为什么我问这个问题;) – cplusogl 2012-07-21 21:28:29

+1

你知道,你可以在互联网上说“对接”。 – Falmarri 2012-07-21 23:34:36

回答

0

您是否预分配您的元素对象,并重新使用空容器而不是分配新容器?

+0

是的,我正在使用某种形式的池模式 – cplusogl 2012-07-21 21:24:59

1

我不会担心由于内存分配造成的减速,除非您明确地发现它是一个问题。内存分配并不是真正导致Android游戏速度下降的原因,而是在GC运行时,这通常是问题所在。除非您经常从Map中插入和删除,否则您可能不必担心分配。

更新:

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

+0

正如我刚刚在UPDATE部分中所写的那样,粒子可能会在...中感到痛苦,并且他们将会绝对经常插入/移除:/ – cplusogl 2012-07-21 21:33:07

+0

我不得不重新考虑它我不太确定这是否是我试图找到的解决方案。尽管如此,我更喜欢某种Map/Tree容器,它为其内部工作提供了某种内部池化机制(在我写的代码中有很多地方当Map/Tree更适合),以避免动态分配:/ – cplusogl 2012-07-21 21:40:18