iOS的乐器:为什么内存监视器不同意分配?

从这张屏幕截图可以看出,Allocations认为我的应用程序(Ongo)仅使用7.55 MB的内存,而Memory Monitor则为53.30。此外,可用系统内存与应用程序正在使用的内存量几乎没有关联。有谁知道为什么这两个工具之间会有如此大的分歧?另外,是否可以找到低系统内存的来源,或者如何防止其很快耗尽?我的应用程序似乎没有泄漏内存,但是以某种方式耗尽了系统资源。



胡说叔叔
浏览 527回答 3
3回答

慕盖茨4494581

对于那些在2012年之后看到此帖子的人:真正加载到设备物理内存中的内存是VM Tracker Instrument中的常驻内存。分配工具仅标记由malloc / [NSObject alloc]和某些框架缓冲区创建的内存,例如,解压缩的图像位图未包含在分配工具中,但它始终占用您的大部分内存。请观看WWDC 2012 Session 242 iOS App性能:内存以从Apple获取信息。

暮色呼如

我认为这是由于OpenGL ES的内存使用情况已从ObjectAlloc中隐藏,但已计入“内存监视器”中。例如,在这里的问题中,请参见zoul的测试,他在创建纹理时观察到ObjectAlloc略有上升,但随后该内存在传递给OpenGL ES时从该仪器中消失了。内存监视器仍会跟踪该纹理内存。这应该包括UI元素(如图层和视图)的视觉外观,因为CALayers实际上是OpenGL ES纹理的包装。UI元素的实际2D图像表示似乎没有被ObjectAlloc跟踪,这导致ObjectAlloc中的总值较低。ObjectAlloc仍然可以很好地跟踪分配的数量和类型,并且自从出现堆快照功能以来,它就变得更加有价值。您只想与Memory Monitor配合使用,以查看您真正的整体内存使用情况。

明月笑刀无情

内存监视器将计算应用程序拥有的大部分或全部资源,包括在内核级别间接分配的资源。这包括Brad建议的AFAIK视频内存(纹理等),还包括内存映射文件以及可能比较大的内核结构(如套接字)。清单可能很长...
打开App,查看更多内容
随时随地看视频慕课网APP