我正在编写我的第一个Android游戏,读了一篇有关优化游戏的长篇演示之后,我开始检查我的分配情况。我已经成功地除掉了除了ArrayList在创建for(Object o : m_arrayList)约定的隐式迭代器时所做的所有游戏内分配。
由于我所有的游戏对象、AI实体等都是为了方便而存储在这些ArrayList中,因此有相当多的这些迭代/分配。
那么我的选择是什么?
1.理论上,我可以指定合理的上限并使用数组,但我喜欢ArrayList的特性,例如存在和删除操作,使代码更加简洁明了。
2.重写ArrayList并提供自己的iterator()实现,返回一个类成员而不是每次使用时分配新的迭代器类型。
为了方便起见,我更愿意选择选项2,但我试着做了一下,遇到了问题。有人有上述第二个选项的示例吗?我曾在继承泛型类时遇到了类型冲突的问题。
第二个问题是还有其他避免这些分配的方法吗?
附加问题是,是否有人知道ArrayList预先分配一定数量的内存槽以适应一定量(在ctor中指定或作为可移动值指定),只要保持在这些界限内就永远不需要进行其他分配?即使在clear()之后?
提前感谢您的帮助,抱歉内容很多,但我认为这些信息对许多人可能有用。
由于我所有的游戏对象、AI实体等都是为了方便而存储在这些ArrayList中,因此有相当多的这些迭代/分配。
那么我的选择是什么?
1.理论上,我可以指定合理的上限并使用数组,但我喜欢ArrayList的特性,例如存在和删除操作,使代码更加简洁明了。
2.重写ArrayList并提供自己的iterator()实现,返回一个类成员而不是每次使用时分配新的迭代器类型。
为了方便起见,我更愿意选择选项2,但我试着做了一下,遇到了问题。有人有上述第二个选项的示例吗?我曾在继承泛型类时遇到了类型冲突的问题。
第二个问题是还有其他避免这些分配的方法吗?
附加问题是,是否有人知道ArrayList预先分配一定数量的内存槽以适应一定量(在ctor中指定或作为可移动值指定),只要保持在这些界限内就永远不需要进行其他分配?即使在clear()之后?
提前感谢您的帮助,抱歉内容很多,但我认为这些信息对许多人可能有用。
trimToSize
来节省空间。 - Pedantic