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