4

我正在模拟器上测试我的应用程序的内存使用情况。问题是,在模拟器上,应用程序堆只是不断增长,只是释放了一点资源。如果没有收集,它将在大分辨率屏幕上导致 OutOfMemory 异常。

我下载了 Sony SDK,Xperia Z 有一个模拟器配置,分辨率为 1080x1920,默认堆为 64MB。我认为该分辨率的堆大小很小,因为我的应用程序仅在启动时使用 40MB。但是在我的手机上,它使用 15MB 的 64MB(分辨率为 540x960)。所以这个非常小的堆大小(可能不是真的?)+ GC 行为导致 OutOfMemory 非常快。

在真实设备上(我只在我的设备上测试过),GC 运行得非常好,它释放了不再使用的资源,但我真的无法预测这是否适用于其他手机。

我应该忽略 GC 在我的模拟器上的工作方式还是我的应用程序的问题?

4

1 回答 1

0

模拟器上堆的增长表明在某些时候你有内存泄漏。

当您在不同的应用程序之间发送意图时,它们很常见(例如从图库中选择图像)。大多数设备可以毫无问题地处理此类泄漏。

堆长大的另一个原因:低效的内存操作。这意味着有时您需要大量内存(例如,您从图库中选择了 5M 图像,为其创建了 inpuststream 并将其作为位图保存在内存中,因此您要求 15+M 仿真器将显示只有高堆增长,但大多数设备会显示错误)。

如果您看到堆增长 - 分析您的内存使用情况并检测泄漏。Link
如果你没有检测到任何奇怪的东西,你几乎可以安全地忽略堆警告。

注意:堆显示提供的空间,未使用。

于 2013-07-17T10:55:23.587 回答