【问题标题】:Difference in garbage collector behavior on Android device versus the emulatorAndroid 设备与模拟器上垃圾收集器行为的差异
【发布时间】:2013-04-08 20:13:19
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android android-emulator garbage-collection


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2011-07-08
      相关资源
      最近更新 更多