我的应用程序崩溃了很多,原因是我很难理解。它不是那么崩溃 - 它被外部的“未知”过程杀死了:
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以上某个图书馆。所以,我开始在模拟器中进行分析,而不是在设备上进行分析。分配工具继续报告应用程序使用8-ish MB,但VM Tracker告诉另一个故事:
所以......看起来VM Tracker能够看到一些重要的内存使用,而Allocations则没有。
为什么分配工具会丢失此应用使用的99%的内存?
更新:为了回应nielsbot的问题,我仔细研究了VM Tracker的信息,发现我在Allocations中没有看到的内存的最大部分归因于Core Animation :
答案 0 :(得分:2)
我认为VM空间包括共享框架和映射内存之类的东西,而分配可能不会......
我猜居民大小更接近实际使用的RAM量。纯VM内存可能只是映射地址空间,而不是实际消耗的物理RAM。
例如,看看Safari,我看到1.92 GB虚拟内存映射,但更接近549 MB驻留,我认为这是有道理的......