> live Bytes对于检查内存优化或内存消耗很重要?为什么?
>为什么我会关心整体字节/真实内存,如果它还包含已发布的对象?
>何时以及为何使用这些术语(实时字节数/总字节数/实内存量)?
谢谢
解决方法 “live Bytes”表示“已分配但尚未释放的内存”.这很重要,因为它是“应用程序使用多少内存”的最容易掌握的衡量标准.“总字节数”表示“所有已分配的内存,包括已释放的内存”.这不太有用,但可以让你对“堆乱”有所了解.流失会导致碎片化,堆碎片可能会成为一个问题(尽管这些日子看起来非常模糊.)
“真实内存”试图区分使用的物理RAM数量(而不是有多少字节的地址空间有效).这与“live Bytes”不同,因为“live Bytes”可能包括与当前未被分页到物理RAM的内存映射文件(或共享内存或窗口后备存储或其他)相对应的内存范围.即使您不使用内存映射文件或其他奇特的VM分配方法,系统框架也可以使用它们,因此这种区别对每个进程始终都有一定的重要性.
编辑:由于您显然担心使用UIWebVIEw导致的内存使用,让我看看我是否可以阐明:
根本不使用UIWebVIEw(即全局缓存等)存在一定的内存“价格”.这些包括各种全局字体缓存,JavaScript JIT缓存以及类似的东西.其中大多数都会表现得像单身人士:第一次使用时分配(通过使用UIWebVIEw间接分配),并且在流程结束之前永远不会释放.还有一些可变大小的全局缓存(比如那些缓存Web响应; CFURL通常会管理这些缓存),但预计这些缓存将由系统管理.正如您所见,关于UIWebVIEw的这些事物的集体“重量”是非平凡的.
我对UIKit或WebKit内部结构没有任何了解,但我希望如果你与某人做过讨论,他们对“为什么我使用UIWebVIEw导致如此多的内存使用?”这一问题的回答.将是双管齐下:第一个分支是“这是使用UIWebVIEw的入场价格 – 它基本上就像在你的过程中运行整个网络浏览器.”第二个分支是“系统框架缓存由系统自动管理”,这意味着,例如,CFURL缓存(这是使用UIWebVIEw导致创建的东西之一)由系统管理,因此,如果出现内存警告,系统框架将负责从这些缓存中驱逐事物以减少它们消耗的内存;你无法控制那些,你只需要相信系统框架将会做你需要做的事情. (在系统缓存管理器执行的 *** 作不够激进的情况下,这对您没有帮助,但是您不会再对它们进行任何控制,因此您需要从另一个角度解决问题,无论哪种方式.)如果您想知道为什么在取消分配UIWebVIEw后内存使用不会失效,这就是您的答案.它背后有很多东西,你无法控制.
分配,使用然后解除分配UIWebVIEw的期望是净零 *** 作,忽略了一些非平凡的,固有的和不可避免的副作用.这种副作用的存在不是(本身)指示UIWebVIEw中的错误.到处都有像这样的副作用.如果你要创建一个简单的应用程序除了启动然后在运行循环一次旋转后终止,然后在exit()上设置一个断点,并查看已经分配但从未释放的内存,那么就会创建一个简单的应用程序成千上万的分配.这是在整个系统框架和几乎每个应用程序中使用的非常常见的模式.
这对你意味着什么?这意味着您实际上有两个选择:使用UIWebVIEw并在内存消耗中支付“入场费”,或者不使用UIWebVIEw.
总结以上是内存溢出为你收集整理的ios – Xcode仪器:内存术语实时字节和总字节数(真实内存)混淆全部内容,希望文章能够帮你解决ios – Xcode仪器:内存术语实时字节和总字节数(真实内存)混淆所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)