10

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

问题是我应该走多远?我已经看到了大量的 Android 应用程序示例,它们依赖于静态状态来“加快速度”。将需要进行垃圾收集的实例数量从几十个增加到几百个真的有那么大的不同吗?我可以想象将我的编码风格更改为现在创建了数十万个对象,就像您在成熟的 Java-EE 服务器上可能拥有的那样,但是依靠一堆静态状态来(据说)减少要被垃圾收集的对象的数量似乎奇怪的。

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

4

2 回答 2

10

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

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

未来对 Dalvik GC 的改进(例如分代收集)应该会减少这个问题。

于 2010-04-07T18:40:02.063 回答
4

我想说这真的取决于你在做什么以及你现在的编码风格。始终有必要牢记移动设备的硬件限制和相应的程序,但话又说回来,无论您的应用程序将在哪里运行,认识到这一点都是很好的做法。如果您正在执行大量需要实时更新或类似游戏的非常密集的计算,那么您可能会考虑使用 NDK,但如果您只是在做普通的用户驱动的事情,那应该不会那么糟糕. 我的建议是尽量节俭,但不要过分担心优化,直到您对它的运行方式有所了解。

于 2010-04-07T18:35:00.827 回答