什么是iOS的常驻和脏记忆?

时间:2012-11-18 04:02:29

标签: iphone ios macos memory-management

有人可以告诉我,什么样的记忆是脏/居住的,它们来自哪里? 常驻内存与Mac OS的“有线内存”意味着相同吗?

这就是我对Mac OS内存的看法:

  

有线:这是指内核代码等。内存不应该   永远被移出RAM。也称为居民记忆。

     

共享:两个或多个进程共享的内存。都   进程会显示这么多的内存,所以它可以是一点点   误导了实际使用的内存量。

     

Real:这是报告的应用程序的“真实”内存使用情况   by task_info() - 粗略计算物理页面的数量   目前的流程有。 (RSIZE)

     

私有:这是一个进程仅依靠它自己使用的内存   用于驻留内存。 (RPRVT)

     

虚拟:进程中的地址空间总量   映射到任何东西 - 这是否是一个任意大的空间   变量或任何东西 - 它不等于实际的VM使用。 (VSIZE)

     

活动:当前标记为活动的内存,并使用RAM。

     

非活动:“不再使用非活动内存并且已经使用过   缓存到磁盘。它将保留在RAM中,直到另一个应用程序需要   空间。如果您将这些信息留在RAM中,对您有利   (或您的计算机的客户端)稍后再回来。“ - Mac OS X帮助

     

免费:实际可用的RAM数量,没有任何数据。

2 个答案:

答案 0 :(得分:33)

差不多一年了,我明白了。

清理记忆

清理内存是可以重新创建的内存,在iOS上它是内存:

  • 系统框架
  • 您应用的二进制可执行文件
  • 内存映射文件

还要注意这种情况:当你的应用程序链接到框架时,干净的内存将增加框架二进制文件的大小。但大多数时候,只有部分二进制文件真正加载到物理内存中。

脏记忆

非清洁内存的所有内存都是脏内存,系统无法重新创建脏内存。

当存在内存压力时,系统将卸载一些干净的内存,当再次需要内存时,系统将重新创建它们。

但是对于脏内存,系统无法卸载它们,并且iOS没有交换机制,因此脏内存将始终保存在物理内存中,直到达到一定限制,然后您的应用程序将被终止并且所有内存都将被它由系统回收。

虚拟内存

virtual memory = clean memory + dirty memory.

这意味着虚拟内存就是你想要的所有内存。

常驻记忆

resident memory = dirty memory + clean memory that loaded in physical memory

驻留内存是物理内存中真正加载的内存,它意味着所有脏内存和清洁内存的一部分。

<强>结论

任何时候都是如此:

virtual memory == (clean memory + dirty memory) > resident memory > dirty memory

如果您担心应用程序正在使用的物理内存(这是因内存不足而导致应用程序终止的关键原因),您应该主要关注驻留内存。

答案 1 :(得分:7)

驻留内存是为您的应用分配的内存。脏内存是由于iOS中缺少分页系统而无法自动解除分配的驻留内存。我在http://liam.flookes.com/wp/2012/05/03/finding-ios-memory/找到了这些信息。然后,对于您列出的内存类型,iOS中的驻留内存更接近真实或私有。根据我的理解,在iOS中你应该最关心的是脏内存,因为它可以确定你的应用程序是否在后台暂停时被杀死,如果内存不足的情况。