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

时间:2010-04-07 18:14:36

标签: android dalvik

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

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

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

2 个答案:

答案 0 :(得分:10)

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

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

Dalvik GC的未来改进(例如代际收集)应该不会成为问题。

答案 1 :(得分:4)

我会说这实际上取决于你正在做什么以及你现在的编码风格。始终有必要牢记移动设备和程序的硬件限制,但同样,无论您的应用程序在哪里运行,都应该认识到这一点。如果你正在进行大量需要实时更新或类似游戏的真正密集型计算,那么你可能会考虑使用NDK,但如果你只是做正常的用户驱动的东西,它应该不是那么糟糕。我的建议是尽量节俭但不要过于担心优化,直到你了解它的运行方式。

相关问题