Iphone iOS仪器:为什么内存监视器与分配不一致?

Iphone iOS仪器:为什么内存监视器与分配不一致?,iphone,ios,ipad,memory-management,xcode-instruments,Iphone,Ios,Ipad,Memory Management,Xcode Instruments,从instruments的屏幕截图中可以看出,我的应用程序(Ongo)只使用了7.55Mbs的内存,而内存监视器显示为53.30。此外,可用系统内存与应用程序使用的内存量几乎没有关联。有人知道为什么这两种工具之间存在如此大的分歧吗?此外,是否有可能找到系统内存不足的原因,或者如何防止内存过快耗尽?我的应用程序似乎没有内存泄漏,但不知何故它耗尽了系统资源 谢谢 我认为这是因为OpenGL ES的内存使用情况对ObjectAlloc是隐藏的,但会计入内存监视器中。例如,参见zoul在问题中的测试,他

从instruments的屏幕截图中可以看出,我的应用程序(Ongo)只使用了7.55Mbs的内存,而内存监视器显示为53.30。此外,可用系统内存与应用程序使用的内存量几乎没有关联。有人知道为什么这两种工具之间存在如此大的分歧吗?此外,是否有可能找到系统内存不足的原因,或者如何防止内存过快耗尽?我的应用程序似乎没有内存泄漏,但不知何故它耗尽了系统资源

谢谢


我认为这是因为OpenGL ES的内存使用情况对ObjectAlloc是隐藏的,但会计入内存监视器中。例如,参见zoul在问题中的测试,他观察到ObjectAlloc在创建纹理时略有上升,但当传递到OpenGL ES时,该工具的内存消失。内存监视器仍然跟踪纹理内存

这应该包括UI元素的视觉方面,如层和视图,因为Calayer是OpenGL ES纹理的有效包装器。用户界面元素的实际二维图像表示似乎没有被ObjectAlloc跟踪,这导致ObjectAlloc中的总值较低


ObjectAlloc仍然适合跟踪分配的数量和类型,自从heapshot功能出现以来,它的价值更大。您只需要将它与内存监视器配合使用,以查看您的真实总体内存使用情况。

内存监视器将统计应用程序所拥有的大部分或所有资源,包括内核级别的间接分配资源。这包括Brad建议的AFAIK视频内存(纹理等),还包括内存映射文件和可能较大的内核结构,如套接字。名单可能很长……

对于那些在2012年之后看到这篇文章的人来说:

真正加载到设备物理内存中的内存是VM Tracker Instrument中的驻留内存

分配工具仅标记malloc/[NSObject alloc]创建的内存和一些框架缓冲区,例如,解压缩的图像位图不包括在分配工具中,但它始终占用大部分内存


请观看WWDC 2012 Session 242 iOS应用程序性能:内存,以便从苹果获取信息。

任何封装在GCD分派调用括号内的代码都不会受到两件事的影响:错误报告,有时还会进行分配计数。这通常只适用于CoreFoundation或任何其他非UIKit或非NSFoundation的产品。

没有人知道原因?我唯一的猜测是,使用屏幕不动产进行图像处理不会在分配中向应用付费,而是在内存监视器中。分配不跟踪整个进程的内存使用情况,还是内存监视器跟踪的内存不在我的进程中?内存监视器不是跟踪所有正在运行的应用程序的内存吗?分配工具不是只跟踪你的应用程序的内存吗?@iPortable ofc是的,这就是为什么他不是在比较所有内存使用情况,而是只比较它的应用程序。。。阅读好问题。乔,记忆监视器和你感兴趣的数字非常接近。长期以来,我们一直在与苹果工程师一起追查一个特定的bug,其中内存在内存监视器中丢失/未被考虑,最终导致应用程序崩溃,有时甚至手机崩溃!但这是非常罕见的,而且从未解决。谢谢你的回答。格兰芬多50分。我希望得到一个更明确的答案,也许是指向我错过的一些文档,但我想没有一个。无论如何,Zoul的测试很有趣。感谢你的回答Brad,我的应用程序是CoreData,而且UIWebView很重,所以我想我应该仔细看看后者(内存监视器报告我的应用程序使用了~100 MB,iPad1,iOS5)。视频在为感兴趣的人准备。