6

由于我难以理解的原因,我的应用程序经常崩溃。它并没有崩溃——它被外部的“未知”进程杀死:

Processes
     Name        <UUID>       rpages       recent_max       [reason]          (state)

     test-app    <....>       167111       167111     [per-process-limit] (frontmost) (resume)

我可以理解,如果我分配了一个巨大的内存块,或者一个无数的小块,但我并没有做任何令人发指的事情。使用 Instruments 进行分析告诉我,该应用程序仅使用大约 8 MB,当我加载一些大型内容时,偶尔会飙升至 13 MB 左右。没有严重的泄漏,该应用程序通常很快就被杀死。

一位同事在模拟器中运行时开始使用 Activity Monitory 检查应用程序的内存使用情况,并注意到当我们开始使用某个库时,内存从大约 70 MB(我猜模拟器中的情况有点不同)飙升至 800 MB 以上. 所以,我开始在模拟器而不是设备上进行分析。Allocations 工具继续报告应用程序使用 8-ish MB,但 VM Tracker 讲述了另一个故事:

仪器屏幕截图

所以......看起来VM Tracker能够看到分配没有的一些重要内存使用。

为什么分配工具缺少此应用程序使用的 99% 的内存?

更新:针对 nielsbot 的问题,我仔细查看了 VM Tracker 的信息,发现我在分配中没有看到的最大部分内存归因于核心动画:

虚拟机跟踪器屏幕截图

4

1 回答 1

2

我认为虚拟机空间包括共享框架和映射内存之类的东西,而分配可能不...

我猜常驻大小更接近实际使用的 RAM 量。纯 VM 内存可能只是映射地址空间,而不是实际消耗的物理 RAM。

例如,查看 Safari,我看到 1.92 GB 虚拟内存映射,但更接近 549 MB 常驻,我认为这是有道理的......在此处输入图像描述

于 2013-03-20T23:40:48.947 回答