什么是iOS的常驻和脏内存?

有人可以告诉我,什么样的记忆是肮脏/居民,他们从哪里来? 驻留内存与Mac OS的“有线内存”是否相同?

这是我所看到的有关Mac OS内存:

有线:​​这是指内核代码等。 内存不应该被移出内存。 也知道作为常驻记忆。

共享:在两个或多个进程之间共享的内存。 这两个进程都会显示这么多的内存,所以在实际使用内存的时候有点误导。

真实:这是由task_info()报告的应用程序的“真实”内存使用情况 – 粗略统计当前进程的物理页数。 (RSIZE)

私有:这是一个进程在驻留内存中使用的单独使用的内存。 (RPRVT)

虚拟:映射到任何东西的进程中的地址空间总量 – 无论是variables或任何东西的任意大的空间 – 它都不等同于实际的虚拟机使用。 (VSIZE)

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

Inactive:“不活动的内存不再被使用,并被caching到磁盘,它将一直保留在RAM中,直到另一个应用程序需要这个空间为止,如果你(或者你的计算机的一个客户端)返回这个信息,到后来“。 – Mac OS X帮助

Free:实际可用的RAM数量,不包含任何数据。

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

清理内存

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

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

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

脏记忆

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

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

但是对于脏内存,系统不能卸载它们,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 

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

驻留内存是为您的应用程序分配的内存。 脏内存是由于iOS中缺less分页系统而无法自动释放的常驻内存。 我在http://liam.flookes.com/wp/2012/05/03/finding-ios-memory/find了这个信息。 那么对于你列出的内存types,iOS中的驻留内存更接近真实或私有内存。 从我的理解来看,在iOS中最应该关注的就是这个肮脏的内存,因为它可以确定当应用程序在内存不足的情况下在后台挂起时是否会被终止。