1

来自 Android 的性能提示

对象创建从来都不是免费的。...当您在应用程序中分配更多对象时,您将强制进行定期垃圾收集,从而在用户体验中产生一些“小问题”。

我的应用程序会定期收集 GPS 数据以及一些元数据。对于每个位置请求,它应该将结果添加到数据对象中:

"data": {
    "timestamp": {
      "lat": "value",
      "lng": "value"
      "meta": "value"
    }
    "timestamp": {
      "lat": "value",
      "lng": "value"
      "meta": "value"
    }
    ...
}

然后在对象达到一定大小后,或者当设备具有更好的连接性时,应用程序会将完整的数据对象流式传输到我的服务器,将其清除,然后重新使用空对象。

虽然重用外部data对象会产生更好的性能,而且肯定不是那么难实现,但似乎不可能重用内部timestamp对象。我可以重新使用在下一轮 GPS 数据收集中有用的内部对象,并让任何剩余的内部对象被垃圾收集吗?

4

1 回答 1

5

我可以重新使用在下一轮 GPS 数据收集中被证明有用的内部对象,并让任何剩余的内部对象被垃圾收集吗?

是的,有可能。但是你有任何迹象表明这样做实际上是个好主意吗?您多久收集一次这些数据?你之前提到过“定期”——这听起来不像是你得到了大量的营业额。

像这样的微优化在流畅性能绝对关键的应用程序中当然很重要 - 例如手机游戏 - 但在许多其他应用程序中它只是不必要的,并且会损害代码的可读性和可维护性。

我建议您在做出任何决定之前衡量您的应用程序的性能。垃圾收集真的伤害了你吗?这种类型是这些问题的根源吗?(如果它只是你 GC 问题的一小部分,那么回收这个特定类型就没有多大意义了。)

于 2013-10-31T19:20:35.347 回答