【问题标题】:What do "Dirty" and "Resident" mean in relation to Virtual Memory?与虚拟内存相关的“脏”和“驻留”是什么意思?
【发布时间】:2011-07-07 18:13:05
【问题描述】:

我从大学的 CS 课程中退学了...那么,请对计算机科学有充分了解的人告诉我:Dirty 和 Resident 是什么意思,与虚拟内存有关? 而且,对于奖励积分,虚拟内存到底是什么?我正在使用 Instruments 中的 Allocations/VM Tracker 工具来分析 iOS 应用程序。

*提示 - 试着解释得好像你在和一个 8 岁的孩子或一个完全低能的孩子说话。 谢谢大家。

【问题讨论】:

  • 健康态度+1!这是获得有用答案的方法,thanx :)

标签: iphone objective-c xcode ios instruments


【解决方案1】:

“脏内存”是已经以某种方式改变的内存 - 这是垃圾收集器必须查看的内存,然后决定如何处理它。根据您构建数据结构的方式,您可能会导致垃圾收集器将大量内存标记为脏内存,从而使每个垃圾收集周期花费的时间比要求的要长。将此数字保持在较低水平意味着您的程序将运行得更快,并且不太可能出现明显的垃圾收集暂停。对于大多数人来说,这并不是一个真正的问题。

“驻留内存”是当前加载到 RAM 中的内存 - 实际正在使用的内存。虽然您的应用程序可能需要在内存中跟踪许多不同的项目,但它可能只需要在任何时间点都可以访问一小部分。将这个数字保持在较低水平意味着您的应用程序的加载时间较短,可以与其他应用程序良好运行,并降低您在应用程序运行时耗尽内存和崩溃的风险。大多数时候,这可能是您应该注意的数字。

“虚拟内存”是您的应用程序在任何时间点跟踪的数据总量。此数字与正在使用的数字不同(正在使用的数字被标记为“常驻内存”) - 系统会将跟踪但未被应用程序使用的数据保存在实际内存之外的其他地方。例如,它可能会将其保存到磁盘。

【讨论】:

  • 虽然这对于 Mac OS X 是正确的,但在 iOS 上没有虚拟内存或交换到磁盘。
  • 间接鼓励开发人员工作,就好像两者都不存在一样。但是,它们就在那里,只是功能不完整,目前还不能直接供开发人员/应用程序使用(也就是说,如果没有越狱你的 iPhone)。
  • 无论操作系统如何,应用程序都不会收到交换活动通知。从开发人员的角度来看,Mac OS X 和 iOS 之间的不同之处在于,我们在 OS X 上可能会更加草率,因为我们知道 a) 系统 RAM 更多,并且 b) 如果我们分配的内存过多,则可以在系统陷入真正的麻烦。在 iOS 上不是这样,如果你过度分配,系统会杀死你的应用程序。至于“虚拟内存”和“交换”在 iOS 上是否在技术上可行,我不怀疑,但如果 iOS 交换任何东西,我会感到惊讶。
  • 从iOS9及以后的版本,交换机制变得更加充实和完善;不过,仍然没有进行全盘交换,请参阅developer.apple.com/videos/play/wwdc2018/416
【解决方案2】:

WWDC 2013 - 410 Fixing Memory Issues 很好地解释了这一点。非常值得一看,因为它还解释了脏内存、常驻内存和虚拟内存的一些实际含义。

【讨论】:

  • 我想你的意思可能是WWDC 2013...
  • @pxpgraphics - 是的,你是对的,我也修复了链接。
猜你喜欢
  • 2012-11-06
  • 2021-06-10
  • 2017-12-08
  • 2014-01-16
  • 2020-07-01
  • 2021-11-03
  • 1970-01-01
  • 2011-02-22
  • 2020-06-28
相关资源
最近更新 更多