我对 AdMob SDK 使用的内存量及其实际位置感到困惑。让我解释一下。
我的应用有两个版本:免费版和付费版。免费版有AdMob广告,其他代码与付费版几乎相同(使用常见的Android库)。
我在 Nexus 4 上运行应用程序(Android 4.2.1),并比较内存使用情况。
- 我查看了设备设置 > 应用程序 > 运行中 的应用程序使用的系统内存。
- 我还查看了 Dalvik 堆内存,这是通过 GC logcat 消息和使用 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,我认为它更容易在内存压力下被操作系统关闭。或者安卓操作系统只考虑 Dalvik 堆来决定杀掉哪个应用程序?
- 有没有一种方法可以调整 AdMob SDK 以选择允许分配多少内存?