8

有人可以告诉我,什么样的内存是脏的/常驻的,它们来自哪里?常驻内存与Mac OS的“有线内存”含义相同吗?

这是我看到的关于 Mac OS 内存的内容:

有线:​​这是指内核代码等。永远不应该从 RAM 中移出的内存。也称为常驻内存。

Shared :在两个或多个进程之间共享的内存。这两个进程都会显示此内存量,因此对于实际使用的内存量可能会有些误导。

Real :这是 task_info() 报告的应用程序的“真实”内存使用情况 - 当前进程拥有的物理页数的粗略计数。(尺寸)

Private :这是进程单独使用的内存,用于驻留内存。(RPRVT)

虚拟:进程中映射到任何东西的地址空间总量——无论是用于变量的任意大空间还是任何东西——它并不等同于实际的 VM 使用。(尺寸)

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

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

Free :在没有任何数据的情况下实际可用的 RAM 量。

4

2 回答 2

37

快一年了,我想通了。

干净的记忆

干净的记忆是可以重新创建的记忆,在 iOS 上它是对以下内容的记忆:

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

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

脏记忆

所有不是干净内存的内存都是脏内存,脏内存不能被系统重新创建。

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

但是对于脏内存,系统无法卸载它们,而且iOS没有交换机制,所以脏内存会一直保留在物理内存中,直到达到一定的限制,然后你的App就会被终止,所有的内存都会被回收按系统。

虚拟内存

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

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

于 2013-10-08T04:05:30.283 回答
7

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

于 2012-11-18T06:20:21.980 回答