iOS中的Resident和Dirty Memory是什么?

9
请问有人能告诉我,什么是脏/常驻内存,它们来自哪里? 常驻内存是否意味着Mac OS的“有线内存”?
以下是我对Mac OS内存的了解:
- 有线内存:指内核代码等。这些内存不应该被移出RAM。也称为常驻内存。 - 共享内存:两个或多个进程之间共享的内存。这些进程都会显示此内存量,因此实际使用的内存可能会有所误导。 - 实际内存:这是应用程序的“实际”内存使用情况,由task_info()报告 - 当前进程具有的物理页面数量的粗略计数。(RSIZE) - 私有内存:进程独自使用的内存,用于常驻内存。(RPRVT) - 虚拟内存:映射到进程中任何内容的地址空间的总量 - 无论是变量的任意大空间还是其他内容 - 它并不等同于实际的虚拟内存使用情况。(VSIZE) - 活动内存:当前标记为活动状态并正在使用的RAM内存。 - 非活动内存:已缓存到磁盘且不再使用的非活动内存。如果您(或您计算机的客户端)稍后需要这些信息,则将其保留在RAM中是有利的。- Mac OS X帮助 - 空闲内存:没有任何数据的可用RAM量。
2个回答

41

已经快一年了,我搞明白了。

清除内存

清除内存是指可以重新创建的内存,在 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

如果您担心应用程序占用物理内存(这是应用程序由于低内存而被终止的主要原因),则应主要关注常驻内存。


8

常驻内存是为您的应用程序分配的内存。脏内存是iOS中由于缺乏分页系统而无法自动释放的常驻内存。我在http://liam.flookes.com/wp/2012/05/03/finding-ios-memory/上找到了这些信息。然后,对于您列出的内存类型,iOS中的常驻内存更接近真实或私有内存。据我所知,在iOS中,您最应该关注的是脏内存,因为它可以确定如果在低内存情况下挂起到后台时,您的应用程序是否会被杀死。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接