由于Android GC性能改变编码风格,到目前为止有多远?

ben*_*rre 10 android dalvik

我一直听说Android应用程序应该尝试限制创建的对象数量,以减少垃圾收集器的工作量.有意义的是,您可能不希望创建大量的对象来跟踪有限的内存占用,例如在传统的服务器应用程序上,在几秒钟内创建100,000个对象并不是闻所未闻.

问题是我应该走多远?我已经看到大量的Android应用程序依赖于静态状态的例子,据说可以"加快速度".是否需要将垃圾收集的实例数量从几十个增加到几十个真的会产生很大的差异?我可以想象改变我的编码风格,现在创建了数十万个对象,就像你可能在一个完整的Java-EE服务器上,但依赖一堆静态状态(据说)减少垃圾收集的对象数似乎奇.

为了创建性能Android应用程序,改变编码风格真的需要多少钱?

fad*_*den 10

"避免分配"建议通常与游戏循环有关.VM必须暂停以收集垃圾,并且当您的游戏以30fps动画时,您不希望发生这种情况.如果您不分配任何对象,VM将不需要收集垃圾以释放内存.如果您的游戏需要在没有用户可见的打嗝的情况下运行,那么您应该考虑更改相关部分中的代码以最小化或消除分配.

如果您正在制作一个包含食谱或显示照片的应用程序,我不会担心 - GC打嗝不是用户可能会注意到的.

Dalvik GC的未来改进(例如世代收集)应该使这不是一个问题.

  • 我还要补充一点,你经常会发现原始为台式机或服务器编写的Java代码效率非常低,而且与其工作量相比,它会摧毁大量的对象.例如,我看到网络代码在处理来自网络的数据时不断导致GC.如果您的代码正在执行此操作,您应该真正考虑优化它,不是因为Dalvik而是因为它不适合移动设备 - 所有这些额外的工作都直接来自电池. (3认同)