驻留内存与活动字节

假设:我正在使用Cocos2d 2.0和ARC(以及使用XCode 4.5.2的仪器)的iPhone项目。

简单的问题:为什么常驻内存比活字节多得多?

我这样说是因为:

使用工具:我得到低内存警告,我运行我的分配工具,并查看平均3/5 MB的实时字节。 然后我得到一个高峰(18MB),然后回到3 / 5MB。 问题是,每当我不停地从一个场景前进到另一个场景时,我会得到低内存警告。

在这里输入图像说明

使用驻留内存控制台打印

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { [self report_memory]; [[CCDirector sharedDirector] purgeCachedData]; } -(void) report_memory { struct task_basic_info info; mach_msg_type_number_t size = sizeof(info); kern_return_t kerr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)&info, &size); if( kerr == KERN_SUCCESS ) { NSLog(@"Memory in use (in bytes): %u", info.resident_size); } else { NSLog(@"Error with task_info(): %s", mach_error_string(kerr)); } } 

我得到的内存警告和打印是48MB的第一次,然后再48MB,然后66MB,然后..崩溃!

所以我想知道,为什么有人说我只应该担心Live Bytes呢?

换句话说,假设我的应用程序是唯一正在运行的应用程序(所有其他应用程序都被终止了) ,我可以说具有非常低的活动字节(从4MB到20MB)并不意味着我不会收到低内存警告?

你的问题的简短答案是“是”。 低活字节并不意味着您不会收到低内存警告。 我之所以这样说,是因为我曾经在几次不同的场合看到记忆警告,同时仪器坚持我的应用程序的活字节是相当合理的。

然而绝大多数时间低活字节是一个很好的指标,你的应用程序没有使用太多的内存,而活字节数是要查看的数字,如果你正在寻找内存尖峰或间接的泄漏证据。

驻留内存是已经分配给应用程序的内存的一种测量,并且尚未被系统回收,但是一些/大部分驻留内存可以被系统回收。 活动字节是分配给应用程序的内存,目前不能被系统回收。 所以你应该期望你的应用程序的驻留内存总是比它的活动字节更高(通常高得多)。