不鼓励在Android游戏开发中使用集合吗?


10

在为Android开发游戏项目时,我正在挖掘一些有关游戏代码性能优化的信息。我知道在游戏代码中不鼓励使用Java 集合(例如List,Arraylist等),尽管集合是Java编程中的有用工具。为什么呢?我想知道技术细节,因为Collection框架会对Android系统产生多大的影响,为什么?在这方面的任何帮助将是巨大的。


你在哪里读的?
egarcia

大概在这里:developer.android.com/guide/practices/design/performance.html 注意它的含义:总结:默认情况下使用增强的for循环,但考虑对性能至关重要的ArrayList迭代使用手写计数循环。
Nailer

Answers:


8

主要是关于内存分配和垃圾回收。运行时的内存分配使您的垃圾收集器有机会清除垃圾。这会损害您的表现。GC应该很少发生。

大多数Java集合:

A)分配超出他们所需的内存。

B)当您不希望它们分配内存时。

C)遍历集合时为每个迭代器分配内存。

为了规避这些事情:

A)分配具有固定大小的集合。即。创建对象池。

B)在程序初始化时分配这些池。

C)对于具有size()和.get(int index)方法的那些集合类型,避免使用for(Object obj:collection)。


2
所有有效的观点,但请记住:“我们应该忘记效率低下的问题,大约有97%的时间是这样:过早的优化是万恶之源”。您应该将此类优化限制在真正必要的地方。在所有其他地方,争夺清晰简单的设计。
迈克尔·克莱门特

@Michael:在当今的系统中,具有高速缓存,慢速内存和多个内核的内存分配是您可以做的最昂贵的事情。

2
@Michael:您很难找到任何高性能的商业游戏引擎,他们并没有尽其所能优化内存分配模式。这是关于实时Android游戏主题的漫长讨论。它有些陈旧,但大多数内容仍应适用:youtube.com/watch?
v

当然,请不要误会我的意思:我不想不同意您的回答。我只想指出,您应该明智地在正确的位置进行优化。在对性能影响最小(例如1%)的位置使用Arrays而不是Collections没有好处。(此处也进行了详细讨论:developer.android.com/guide/practices/design/…
Michael Klement 2010年

3
@AttackingHobo:我不同意。盲目地进行优化不是有益的,这就是您的陈述对我来说的感觉(如果我弄错了,请纠正我)。克里斯·普鲁埃特(Chris Pruett)在上面链接的Google IO视频中也表示:“在一周的每一天中,都应在速度上选择灵活性,直到游戏玩法受损为止。” 我同意这一点。
Michael Klement 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.