“匿名虚拟机”在分配工具中的意义是什么?

9
我在我的应用程序中经常收到内存警告,但我不知道为什么。以下是分配工具的快照。
我知道我们对分配给我们的虚拟内存没有任何控制权,但我试图了解开发人员所看到的26.50 MB数字代表什么信息。
1. 高VM意味着什么?会导致jetsam吗?这是否引起其他问题? 2. 这个值是否取决于设备? 3. 低vm是否意味着您的应用程序具有内存效率 4. 高VM是否会导致应用程序内存警告? 5. 是什么原因导致这个值变化? 6. 当开发人员看到他们的应用程序的VM高达300 MB时,应该采取哪些步骤? 7. VM跟踪器工具与此值相关吗?
1个回答

13

匿名虚拟内存包含许多内容,其中一些是您希望最小化的内容,而另一些则通常不那么重要。 "匿名虚拟内存" 的简短版本是指您已映射但未命名的地址。堆分配变得“命名”了,这使您可以将它们作为对象进行跟踪。但是,许多(很多)非对象的事物都属于“匿名虚拟内存”范畴。

使用 malloc 分配的内容可能会位于此区域中。但是还有内存映射文件。您的可执行文件是一个内存映射文件,但由于从未被修改,因此它的某些部分可以被交换出去。所以"情况很复杂"。但总的来说,是的,您关心这个部分,但您可能并不是非常关心其中的所有内容。堆分配往往跟踪您的 ObjC 东西。 匿名 VM 通常跟踪您没有太多直接控制力的东西(例如 CALayer 后备存储)。

话虽如此,您提供的仪器输出看起来并不是任何主要问题的迹象。我怀疑这并不表明您在压力测试内存时会出现问题。您需要使自己处于内存警告的情况下,然后查看正在使用内存的具体情况。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接