【问题标题】:Difference between virtual memory consumption and real memory with Memory Monitor on iOSiOS上使用内存监视器的虚拟内存消耗和真实内存之间的区别
【发布时间】:2013-01-28 03:42:07
【问题描述】:

我的应用程序出现问题。到目前为止,我主要在 iPad 3 上进行测试,偶尔在 iPad 1 上进行检查以确保一切正常。

我正在我的应用中播放 UIImageView 动画,它在退出前一直退出,只显示“收到内存警告”消息。

我一直在仪器中使用对象分配工具,但据此,我的内存使用率很低。所以在研究了一下之后,我发现了拉森先生的这篇文章:https://stackoverflow.com/a/5627221/329900

现在我使用的是内存监视器工具。但是,我不明白我为什么要辞职。第一代。 iPad 有 256MB 的内存。现在我知道我不能使用所有这些...有人说你不应该使用超过 100MB。

那是真实内存,还是虚拟内存……或者是某种组合?我的真实内存始终在 20 - 25MB 之间,但虚拟内存在崩溃时约为 190 - 205MB。

截图如下:

有人能解释一下吗?

【问题讨论】:

  • 我建议在启用 VM Tracker 仪器的情况下运行应用程序。 VM Tracker 显示图形内存使用情况(虚拟内存)。很可能您的 UIImageView 动画在内存中加载了太多图像来执行动画。更有效的动画技术将是合适的。
  • 那么对于更高效的动画技术,我有哪些选择?另外,如果我一次加载到多个图像,VM Tracker 会显示我吗?

标签: ios memory-management instruments virtual-memory


【解决方案1】:

WWDC 2012 Session Videos页面搜索iOS App Performance: Memory找到的WWDC(Session 242)视频会让你更好地理解VM和真实内存的区别。

但这里有一个快速概述: 一个指针 Range = 2^32 = 4GB 这比任何设备上的物理内存都大(苹果已经发货)。这是通过占用所有可用空间并将其分成 4kb 块来完成的。并非您的应用程序可以访问的所有内存都同时在物理内存中。这些 4kb 的块是调用页面。您的分配被分割出更大的虚拟内存块。然后这些虚拟内存对象被映射到物理内存。

【讨论】:

  • +1。这是一个很棒的视频,在使用记忆工具之前应该需要观看。
  • 我看了视频,我想我明白了,但我仍然不明白如何确定我的应用是否确实一次加载过多。
  • 难道没有更安全或更好的方法来确定应用程序是否一次加载过多,而不仅仅是确保它没有退出?
  • 如果加载过多,您将收到内存不足警告。 stackoverflow.com/q/9461490/1144161。确保您正在使用 didReceiveMemoryWarning。
猜你喜欢
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2017-08-14
  • 2012-06-08
  • 2016-03-19
  • 2012-12-30
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多