假设:我正在使用 Cocos2d 2.0 和 ARC 开发一个 iPhone 项目(并使用 XCode 4.5.2 的 Instruments)。
简短的问题:为什么常驻内存比事件字节高得多?
我这么说是因为:
使用仪器: 我确实收到了内存不足的警告,然后我运行分配工具并看到平均 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)并不意味着我不会收到内存不足警告?
最佳答案
您的问题的简短答案是"is"。低事件字节并不意味着您不会收到低内存警告。我这么说是因为我在几个不同的场合看到内存警告在 Instruments 坚持的同时出现,我的应用程序的实时字节数是相当合理的。
然而,绝大多数情况下,低事件字节数是一个很好的指标,表明您的应用程序没有使用太多内存,如果您正在寻找内存峰值或泄漏的间接证据,则需要关注事件字节数.
驻留内存是对已分配给应用程序且尚未被系统回收的内存的度量,但部分/大部分驻留内存可以被系统回收。事件字节是分配给您的应用程序、当前无法被系统回收的内存。因此,您应该期望应用程序的驻留内存始终高于(通常远高于)其事件字节。
关于ios - 驻留内存与事件字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18624152/