2011-08-05 26 views
1

我正在为android平台编写游戏。我在ConcurrentHashMap中有子弹,并在检查冲突。所有工作都很好,但GC每隔3-5秒运行一次,当使用Allocation Tracker进行检查时,有很多分配(其中90%),每个分配大小为36,位于java.util.concurrent.ConcurrentHashMap $ ValueIterator

并发是关键,因为许多事情可能发生在子弹和正常arraylist投掷并发异常,所以我已经切换到ConcurrentHashMap。我如何优化它的速度和GC?

for (IWeaponBullet xbullet : PlayerSystem.aEnemiesBulletsArray.values()) { 
    //checking 
} 

回答

0

我想你可能会经常调用这个迭代。 values()呼叫正在创建一个集合,并且每次启动循环时都会给出new ValueIterator()

你可以缓存这些值可能更长的时间,而不是经常执行循环?

+0

恐怕不是,我正在检查每一帧与另一个元素发生冲突,有很多对象可以在一帧中修改这个散列表; / –