【问题标题】:What is resident and dirty memory of iOS?iOS的常驻内存和脏内存是什么?
【发布时间】:2012-11-06 09:42:49
【问题描述】:

谁能告诉我,什么样的内存是脏的/常驻的,它们来自哪里? 常驻内存和Mac OS的“有线内存”意思一样吗?

这是我对 Mac OS 内存的了解:

Wired :这是指内核代码等。不应该的记忆 永远被移出RAM。也称为常驻内存。

Shared :在两个或多个进程之间共享的内存。两个都 进程会显示这个内存量,所以它可能有点 关于实际使用了多少内存的误导。

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

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

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

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

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

Free :没有任何数据时实际可用的 RAM 量。

【问题讨论】:

    标签: iphone ios macos memory-management


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      快一年了,我想通了。

      清理内存

      干净的记忆是可以重新创建的记忆,在 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
      

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

      【讨论】:

        猜你喜欢
        • 2011-07-07
        • 2011-07-22
        • 2013-05-21
        • 2011-12-24
        • 2011-09-20
        • 1970-01-01
        • 2011-03-15
        • 2023-03-09
        • 2013-10-20
        相关资源
        最近更新 更多