gpt4 book ai didi

ios - Xcode仪器: Memory Terms Live Bytes and Overall Bytes (Real Memory) confusion

转载 作者:可可西里 更新时间:2023-11-01 03:40:00 26 4
gpt4 key购买 nike

我正在使用浏览器应用程序,在其中我使用UIWebView来打开网页。我使用“内存监视器”运行“仪器”工具。我对文书中使用的术语以及它们为什么很重要感到困惑。请以正当理由解释我的一些问题:

  • 实时字节对于检查内存优化或内存消耗是否重要?为什么 ?
  • 如果它还包含释放的对象,为什么还要关心总体字节数/实内存?
  • 什么时候以及为什么使用这些术语(实时字节/总字节/实内存)?

  • 谢谢

    最佳答案

    Activity 字节”表示“已分配但尚未释放的内存”。这很重要,因为它是“您的应用程序正在使用多少内存”的最容易掌握的度量。

    总字节数”表示“已分配的所有内存,包括已释放的内存”。这用处不大,但会给您一些“堆搅动”的概念。流失会导致碎片化,而堆碎片化可能是个问题(尽管近来有些晦涩。)

    实内存”是尝试区分正在使用多少物理RAM(而不是有效地址空间的多少字节)。这与“ Activity 字节”不同,因为“ Activity 字节”可能包含与当前未分页到物理RAM中的内存映射文件(或共享内存,窗口后备存储或其他)相对应的内存范围。即使您不使用内存映射文件或其他奇异的VM分配方法,系统框架也会使用它们,因此,这种区别对于每个进程始终具有一定的重要性。

    编辑:既然您清楚地担心使用UIWebView会导致内存使用问题,所以让我看看能否对此有所了解:

    完全使用UIWebView会有一定的内存“价格”(即全局缓存等)。这些包括各种全局字体缓存,JavaScript JIT缓存以及类似的东西。其中大多数将表现为单例:首次使用它们时分配(通过使用UIWebView间接),并且直到过程结束才释放。还有一些可变大小的全局缓存(例如缓存Web响应的缓存; CFURL通常管理这些缓存),但是这些缓存应该由系统管理。如您所见,相对于UIWebView,这些东西的总“权重”是微不足道的。

    我对UIKit或WebKit的内部知识一无所知,但是我希望,如果您与做过此事的人进行讨论,他们会回答“为什么使用UIWebView会导致大量内存使用?”的问题。有两个分支:第一个分支是“这是使用UIWebView的入场价格–基本上就像在您的过程中运行整个Web浏览器一样。”第二个分支是“系统自动管理系统框架缓存”,这意味着,例如,CFURL缓存(这是使用UIWebView导致创建的事情之一)由系统管理,因此,如果出现内存警告,则系统框架将负责从这些缓存中逐出东西,以减少它们消耗的内存;您无法控制这些,而只需要相信系统框架就能完成需要完成的工作。 (在系统缓存管理器所做的一切不足以使您积极进取,但您将无法再对其进行更多控制的情况下,这无济于事,因此您需要从另一个角度来解决问题,如果您想知道为什么在取消分配UIWebView之后内存使用量不会减少,这就是您的答案。它在幕后做很多事情,您无法控制。

    分配,使用然后再分配UIWebView的期望是净零操作,它忽略了一些非平凡,固有和不可避免的副作用。此类副作用的存在(本身)并不表示UIWebView中存在错误。到处都有这样的副作用。如果要创建一个琐碎的应用程序,除了启动后什么都不做,然后在运行循环旋转一圈后终止,然后在exit()上设置一个断点,然后查看已分配但从未释放过的内存,那么将会有成千上万个分配。这是在整个系统框架和几乎每个应用程序中使用的非常常见的模式。

    这对您意味着什么?这意味着您实际上有两种选择:使用UIWebView并支付内存使用的“准入价格”,或者不使用UIWebView。

    关于ios - Xcode仪器: Memory Terms Live Bytes and Overall Bytes (Real Memory) confusion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18510239/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com