【问题标题】:What does "Anonymous VM" in allocations instruments signify?分配工具中的“匿名 VM”是什么意思?
【发布时间】:2015-07-30 04:47:38
【问题描述】:

我的应用程序经常收到内存警告,但我不知道为什么。 这是分配工具的快照。

我知道我们无法控制分配给我们的虚拟内存,但我试图了解 26.50 MB 这个数字对开发人员意味着什么信息。

1. 高 VM 是什么意思?它会导致喷气机吗?这是引起任何其他担忧的原因吗? 2.这个值取决于设备吗? 3. 低 vm 是否意味着您的应用程序内存效率高 4. 高 VM 是否会导致您的应用出现内存警告? 5.是什么导致这个值改变? 6. 当开发人员看到他们的应用程序的虚拟机很高(比如 300 MB)时,应该采取什么步骤? 7. VM 跟踪器仪器是否与此值相关?

【问题讨论】:

    标签: ios xcode-instruments


    【解决方案1】:

    匿名 VM 涵盖了很多内容,其中一些是您希望尽量减少的内容,而另一些通常不太重要。 “匿名 VM”的简短版本是您已映射但未命名的地址。堆分配得到“命名”,让您可以将它们作为对象进行跟踪。但是有很多(和很多)非客观事物落入“匿名虚拟机”桶中。

    malloc 分配的东西可以在这个区域结束。但也有内存映射文件。您的可执行文件是一个内存映射文件,但由于它从不脏,它的一部分可以被换出。所以“这很复杂”。但从广义上讲,是的,你确实关心这个部分,但你可能不太关心它的全部。堆分配倾向于跟踪您的 ObjC 内容。匿名 VM 经常跟踪您没有太多直接控制权的事物(例如 CALayer 后备存储)。

    话虽如此,您提供的 Instruments 输出看起来并没有什么大问题。我怀疑这并不表示您正在向记忆施压。您需要让自己进入内存警告状态,看看发生了什么,并深入了解正在使用内存的具体情况。

    有关这方面的更多详细信息,您应该观看WWDC 2013 session 704 "Building Efficient OS X Apps",其中对大部分内容进行了深入探讨。虽然 iOS 的内存系统有些不同,并且一些 OS X 工具在 iOS 上不可用,但其中许多概念仍然适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-16
      • 2011-09-28
      • 1970-01-01
      • 2014-03-23
      • 2019-11-03
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多