- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用浏览器应用程序,在其中我使用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/
我在这方面需要澄清。我觉得Static library和Dynamic Library这两个术语不正确。 lib1.o + lib2.o + lib3.o->“LinkerOutputFile”(可执
我想为多类多标签分类建立一个混淆矩阵,然后计算精度、召回率和 F1。 一个想法是从训练和测试集中的所有组合中构建它,例如 A1 A2A3 A1A3 A1 x x x A
我希望这是一个非常简单的问题,在 Android 中什么相当于在 PHP 中执行此操作: PHP: 函数 BlahBlah ($first_var,$second_var,$optional_var_
我正在努力理解递归,我想我已经明白了......我正在尝试构建一个搜索函数(如 std::string.find()),用于在给定字符串中搜索另一个字符串例如: Given (big) string:
我有一个列表,其中包含有关用户网络浏览器的信息。该列表由 PHP 通过用户需求调查生成。输出如下所示:(示例): Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;Trid
这是我在这里的第一个问题,所以如果我违反了任何规则,或者没有使用正确的格式,请原谅我 我正在用 java swing 创建一个简单的表单,它由 1 个 JLabel、1 个 JTextField 和
使用分段包创建分段线性回归我在尝试设置自己的断点时看到错误;似乎只有当我尝试设置两个以上时。 (编辑)这是我正在使用的代码: # data bullard <- structure(list(Rt =
据我了解,调用 NSLog(@"Local Time Zone %@",[[NSTimeZone localTimeZone] name]); 为您提供设备的本地时区。它给我的是“US/Central
假设我有一个名为 Navbar 的模板,它包含在 Main 和 About 页面中。在 Navbar 模板中,我有一个搜索栏组件,我只想在 Main 模板上显示它。我定义了一个辅助函数,如下所示: T
我正在 Java 中进行分配,我应该使用我在我的项目中导入的 enumeration 类型 MONTH项目。我的老师写道:“有一个特殊的函数可以将数字转换为月份:月.月(8)”。 我已经写了Month
有同学问我,既然操作系统是扩展机或者虚拟机,那么编译器在生成C程序的汇编代码时是否需要知道寄存器的数量,或者处理器的指令的数量。 我花了一段时间在互联网上搜索,这就是我的想法...... 它不需要知道
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我正在尝试理解 initstate 和 initstate_r 的联机帮助页。这两个函数都在初始化随机生成器。如果您有多个线程,则不应使用 initstate,但对于这种情况,您应该使用 initst
据说: When it would yield a class method object, it is transformed into a bound user-defined method ob
我正在学习 JS 函数式编程,并使用 Ramda 进行。 我正在尝试创建一个接受参数并返回列表的函数。这是代码: const list = R.unapply(R.identity); list(1,
我试图在按下“提交”按钮后显示用于“页面加载”的相同加载器。 在页面的最顶部我有: (“gabbia”只是一个容器,而“load_screen”和“loader”是用 css 格式化以获得一个漂亮的
#include #include #define SQUARE(x) (x*x) void main() { clrscr(); int i=3,j,k; j=
#include using namespace std; int myFunc (unsigned short int x ); int main () { unsigned short
在 http://hollywoodnose.com我根据每个页面有多少图片有条件广告。因此,如果有一张图片,我将使用 468 x 60。如果有 4 张图片,我将在第二张图片之后显示 180 x 15
我有一个在数据库上执行全文搜索的搜索查询。 $sql = "SELECT * FROM `tbl_auction_listing` AS `al` JOIN `tbl_user` AS `u` ON
我是一名优秀的程序员,十分优秀!