我对AdMob SDK似乎使用了多少内存以及该内存实际位于何处感到困惑。让我解释。
我的应用程序有两种风格:免费和付费。免费版有 AdMob 广告,否则代码几乎相同(使用常见的 Android 库)。
我在 Nexus 4 (Android 4.2.1) 上运行应用程序并比较内存使用情况。我在设备设置 > 应用程序 > 运行中查看应用程序使用的系统内存。我还查看了 GC logcat 消息报告的 Dalvik 堆内存,并使用了 HPROF 文件。
当我运行付费版本时,我可以看到:
- 系统内存:约16MB
- Dalvik 堆大小:约 10MB
当我运行免费版本时,我可以看到:
- 系统内存:约29MB
- Dalvik 堆大小:约 11MB
换句话说,两个版本的 dalvik 堆大小相似。但实际使用的系统内存要高出 10MB 以上!
在花时间学习内存分析 ( http://www.youtube.com/watch?feature=player_embedded&v=_CruQY55HOk ) 和查看 HPROF 文件以消除任何可能的泄漏之后,我只能看到一个结论:
AdMob 使用的 10MB 额外系统内存实际上是本机内存,使用 malloc 分配,在 dalvik 堆之外!
现在我想知道两件事:
- 我相信由于免费版系统内存比付费版大10MB,因此在内存压力的情况下更容易被操作系统杀死。还是 Android 操作系统只考虑 Dalvik 堆来决定要杀死哪个应用程序?
- 有没有办法调整 AdMob SDK 以选择允许分配多少内存?
非常感谢