【问题标题】:Live Bytes vs Real Memory in Activity Monitor on iOSiOS 活动监视器中的实时字节与实际内存
【发布时间】:2012-02-06 09:01:48
【问题描述】:

我正在开发一个 iOS 应用程序,该应用程序将创建许多小对象和浮点数,并试图了解它消耗了多少内存。

当我运行“Allocations”工具时,它说我有大约 2MB 的“Live Bytes”,当我在应用程序中移动时,这个数字大致保持不变(当应用程序繁忙时,这个数字会达到 3MB 左右,但是然后回落到 2MB)。

但是当我运行“Activity Monitory”工具时,我的应用程序的“真实内存”在完成启动后为 25MB,并且每当在我的 CALayer 中发生绘图时都会迅速增长。不到一分钟,它就超过了 100MB。

为什么“Live Bytes”会显示 2MB,而“Real Memory”会显示 100MB?

我的 CALayer 正在绘制 条路径,它将 CPU 固定在 100% 几秒钟以完成一次绘制操作,并将所有这些点从 NSData 对象加载到CGPoint 值,然后再次释放它们(NSData 对象是正在绘制的点的压缩版本,存储从一个点到下一个点的增量,所以我将它保存在 RAM 中,但不保留实际的 CGPoints)。

它还将绘制的结果缓存在 UIImage 中,并保存在一个不会增长到超过 500KB 的先进先出数组中。

【问题讨论】:

    标签: objective-c ios memory-leaks instruments


    【解决方案1】:

    Real Memory 数字包括您的应用已使用并已释放的内存块,但操作系统尚未费心回收或重用(但如果需要可以)。实时内存是“脏”内存,如果您的应用正在运行并且内存变得太紧,操作系统无法在不杀死您的应用的情况下回收它。

    【讨论】:

    • 谢谢。您知道在创建大量“脏”内存时是否存在严重的性能问题吗?我可以通过简单地消耗我当前内存使用量的两倍来创建一个 lot 更少脏内存,并且如果我收到内存不足警告,可以轻松地回退到“脏”方法。我有选择地将 250GB 数据库的一部分加载到 RAM 中。我可以在 RAM 中容纳的内存越多越好,但我需要性能以及高效的内存存储
    • 我在任何地方都没有看到这个好的答案。知道这一点非常重要。
    【解决方案2】:

    原来我的问题是NSZombieEnabled

    Edit Scheme > Run > Arguments > Environment Variables 中禁用它解决了额外的内存使用问题。

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 2013-09-08
      • 2013-05-04
      • 2015-10-07
      • 1970-01-01
      • 2011-10-12
      • 2017-10-30
      • 1970-01-01
      • 2013-01-28
      相关资源
      最近更新 更多