为什么Activity Monitor报告的内存使用量与分配工具之间存在差异

0xD*_*15B 4 memory allocation objective-c

我面临着很奇怪的问题.

申请~80.Mb

使用Allocations Instrument在模拟器上进行测试,向我显示当前正在使用大约30 Mb,但是当使用Activity Monitor在iPod 4g上进行测试时显示"物理内存使用~133Mb"和"物理内存可用~77Mb"

由于内存警告我的应用程序不断崩溃.

ActivityMonitor和Allocations Instrument之间使用的物理内存有什么区别?

之前我已经信任Allocations Instrument,因为当我释放对象时,使用的内存量减少了,但在ActivityMonitor中,USED内存量以一种奇怪的方式增加和减少,这与我正在做的事情无关.所以,帮助我理解,因为我认为分配的内存与使用的内存相同,或者我错了?

编辑: 似乎我理解数据在activitymonitor中的显示方式.但问题仍然存在.在ActivityMonitor中,图表下方有一列.在那里我找到了我的申请.而且记忆力只会增加.

没有泄漏100%

bbu*_*bum 13

Activity Monitor对于开发/调试目的无用.AM仅在您没有仪器运行时才有用,并且您看到RPRVT随着时间的推移而显着增长.即使这样,它只是一种症状,可能并不表示真正的问题.

AM有点总结了一组不同的内存相关数字.这是一个非常粗略的数字.Allocations工具正在总结您的应用程序中的分配集(在Mac OS X下,可以包括GC和非GC分配).减少分配,整体内存使用量通常会下降.

请注意,不受内存压力影响的系统通常不会请求应用程序返回内存.也就是说,您可能看不到活动监视器数量的下降.

另请注意,"100%无泄漏"仅占减少内存使用总体努力的10%左右.您的应用程序因为令人震惊的内存消耗而被抛弃.这可能是因为一个架构问题,你的应用程序的算法使用大量内存的方式,或者因为你的应用程序正在分配和放弃内存.被遗弃的记忆可能不会显示为泄漏; 如果你有一个只写缓存,其中一个项目的重复项一遍又一遍地放入缓存,但从未检索过,你的内存使用将增长到失败,但泄漏将显示没有泄漏.

泄漏仅仅是没有可行参考的对象.一个有效引用的对象可能仍然有效地泄漏!

快照分析在解决这类问题时非常有效.