驻留内存vs活字节

时间:2013-09-04 21:32:25

标签: ios xcode memory-management instruments didreceivememorywarning

假设:我正在使用带有ARC的Cocos2d 2.0(并使用XCode 4.5.2的仪器)开发iPhone项目。

简短问题:为什么驻留内存比实时字节高很多?

我这样说是因为:

使用乐器 我得到低内存警告,我运行我的分配工具,并查看平均3/5 MB的实时字节。然后我得到一个峰值(18MB),然后回到3 / 5MB。问题在于,每当我从一个场景继续前进到另一个场景时,我都会得到低内存警告。

enter image description here

使用常驻内存控制台打印

- (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)并不意味着我不会收到低记忆警告?

1 个答案:

答案 0 :(得分:3)

对你的问题的简短回答是“是”。低实时字节暗示您不会收到低内存警告。我之所以这么说,是因为我在几个不同的场合看到内存警告同时,仪器坚持我的应用程序的实时字节非常合理。

然而,绝大多数时间的低实时字节是一个很好的指示,表明您的应用程序没有使用太多内存,如果您正在寻找内存峰值或间接泄漏证据,则实时字节数是要观察的数字

驻留内存是对已分配给应用程序且尚未被系统回收的内存的度量,但系统可以回收部分/大部分常驻内存 。实时字节是分配给应用程序的内存,当前系统无法回收这些内存。因此,您应该期望应用程序的驻留内存始终比其实时字节更高(通常更高)。