我正在模拟器上测试我的应用程序的内存使用情况。问题是,在模拟器上,app堆正在增长和增长,只需要释放一些资源。如果没有收集,它将在大分辨率屏幕上导致OutOfMemory异常。
我下载了索尼SDK,并且Xperia Z的仿真器配置分辨率为1080x1920,默认堆为64MB。我认为这个分辨率的小堆大小,因为我的应用程序仅使用40MB启动。但是在我的手机上它使用15MB的64MB(res.540x960)。 所以这个非常小的堆大小(可能不是真的?)+ GC行为导致OutOfMemory非常快。
在一个真实的设备上(我只在我的测试中),GC工作非常好,它释放了不再使用的资源,但我真的无法预测这是否适用于其他手机。
我应该忽略GC在我的模拟器上工作的方式,还是可能是我应用程序的问题?
答案 0 :(得分:0)
在仿真器上增长堆表明在某些时候你有内存泄漏。
当您在不同的应用程序之间发送意图时(例如从图库中选择图像),它们非常常见。大多数设备都可以毫无问题地处理这种泄漏。
堆成长的另一个原因:低效的内存操作。这意味着在某些时候你要求很多记忆(例如你从画廊中选择了5M图像,为它创建了inPuststream并将其作为位图保存在内存中,所以你要求15 + M模拟器只显示高堆增长,但大多数设备都会显示错误)。
如果您看到堆增长 - 分析您的内存使用情况并检测泄漏。 Link
如果你没有发现任何奇怪的东西,你几乎可以安全地忽略堆警告。
注意:堆显示提供的空间,未使用。