我是否应该支持对Android上的新对象进行对象池化?

时间:2014-03-01 19:56:43

标签: java android performance

我开始使用Android游戏开发,其中一个我正在使用的库是universal-tween-engine。作者做出了一些严重基于性能优化的设计决策,以至于API的某些方面牺牲了可用性。

我正在考虑将项目分配到GitHub仓库并清理API,但我不知道Android性能的来龙去脉。在基于标准Hotspot的JVM上,我不会过分担心对象实例化和垃圾收集的开销,因为该平台已经对这些内容进行了优化,我认为这个库的池化行为过早优化但是对于Android我没有想法....

与Hotspot相比,Android上的对象创建和垃圾收集的性能特征是什么(Gingerbread-> KitKat)?如果我将重复创建同一个类的新实例(但具有不同的状态)是否值得汇总这些实例?

1 个答案:

答案 0 :(得分:1)

与桌面Java应用程序不同,Android应用程序当前Dalvik虚拟机之上运行。

垃圾收集在移动设备上相对昂贵,你可能希望避免在性能敏感的代码路径中分配对象,垃圾收集暂停你的应用程序几百毫秒并不罕见 - 这是你想要的任何游戏或者什么时候最后想要的东西用户正在滚动列表视图。

当然这也取决于设备,Android限制了应用程序可以使用的内存量,在高端设备上,除了硬件的性能提升外,您的应用通常会允许使用更多内存,而不是它在低端设备上运行。

移动设备已经走过了漫长的道路,但即使使用高端设备,您仍然无法忽略移动设备上的内存管理。

我建议您首先更好地了解Android(以及一般移动设备)的性能/内存,因此当您对该库进行性能更改时,您确信自己正在进行改进(并始终进行测量! )。一个好的起点是官方Best Practices for Performace