iOS的乐器:为什么Memory Monitor不同意Allocations?

Bri*_*ian 26 iphone memory-management ipad ios xcode-instruments

从这些从乐器拍摄的屏幕中可以看出,Allocations认为我的应用程序(Ongo)仅使用7.55 MB的内存,而Memory Monitor则表示53.30.此外,自由系统内存与应用程序使用的内存量几乎没有任何关联.有谁知道为什么这两个工具之间存在如此大的分歧?另外,是否可以找到低系统内存的来源或如何防止它快速耗尽?我的应用程序似乎没有泄漏内存,但不知何故,它耗尽了系统资源.

谢谢

仪器YU Lie?

Bra*_*son 31

我相信这是因为OpenGL ES的内存使用从ObjectAlloc隐藏,但在Memory Monitor中计算.例如,在这里他的问题中看到zoul的测试,他在创建纹理时观察到ObjectAlloc略微上升,但是当传递给OpenGL ES时,该内存从该工具中消失.内存监视器仍然跟踪纹理内存.

这应包括UI元素的视觉方面,如图层和视图,因为CALayers是OpenGL ES纹理的有效包装.ObjectAlloc似乎没有跟踪UI元素的实际2D图像表示,这导致ObjectAlloc中的总值较低.

ObjectAlloc仍然适用于跟踪数量和分配类型,并且自快照功能出现以来甚至更有价值.您只想与Memory Monitor合作,查看您的真实整体内存使用情况.

  • 谢谢Brad的回答.50分钟到格兰芬多.我希望有一个更明确的答案,也许指向我错过的一些文档,但我猜不会有一个.无论如何Zoul的测试很有趣. (3认同)

Car*_*loS 5

对于那些在2012年之后看到此帖子的人:

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

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

请观看WWDC 2012 Session 242 iOS App性能:内存以从Apple获取信息。