- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Instruments 分析应用程序。分析是使用分配工具以两种方式完成的:
在这两种情况下,我都启用了分配工具进行测试。但令人惊讶的是,在这些情况下,我有两种不同类型的分配输出。
他们的行为应该有所不同吗?或者这是 Instruments 的问题。
我使用 Leaks Tool 分析的时间:
在分配图中: 1. 我在图表中得到很多峰值,实时字节和总字节相同。2. 使用 1 分钟后,我收到黑旗(我认为它是关于内存警告的警报)。然后在出现一组标志后,我的应用程序崩溃了。 (这种情况有时会发生,即使直接在设备中运行应用程序也是如此)
我使用分配工具分析的时间:
在分配图中: 1. 我不会像上述情况那样经常出现峰值。 Live bytes 总是远小于 Overall bytes。2. 我已经使用了20多分钟,从来没有黑旗。
我了解到的一个事实是,当事件字节数和总字节数相等时,可以启用 NSZombieEnabled。
你们有没有遇到过这个问题。
更新 1:
我在第一个案例中遇到了另一个问题。每当我在短时间内进行分析时(与第二种情况下的分析相比),该应用程序都会收到大量黑旗并且我的应用程序崩溃了。 (由于内存警告)
当我尝试类似的逐步使用应用程序时,我的应用程序没有崩溃,也没有得到任何标志。
为什么会出现这种差异?
最佳答案
在第一种情况下,您只跟踪实时分配,因为“泄漏”模板以这种方式配置分配工具。在第二个中,您正在跟踪实时和已取消分配的分配。 (正如 CocoaFu 所说)。
两者都有用,但原因略有不同。
仅跟踪实时分配(通常结合 Heapshot Analysis)是分析应用程序中永久堆增长的好方法。一旦您知道什么东西会永远存在,您就可以找出原因并看看是否有办法对其进行优化。
跟踪所有分配,无论是活的还是死的,是跟踪分配带宽的一种非常有效的方法。您可以按总字节数排序并从最大的 # 开始。查看所有分配点(单击所选行的类别中标签旁边的小箭头),并查看所有分配来自何处。
例如,您的图表显示在该时间段内有 1.27MB 的 14 字节分配——9218 次分配。全部都已释放()d [好!],但这仍然代表一堆工作要分配,填充数据(大概),并释放其中的每一个。这可能是个问题,也可能不是。
(从正确的角度来看,我使用这种技术来优化应用程序。仅通过专注于减少 transient - 短暂 - 分配的数量,我能够使应用程序的主要算法速度提高 5 倍并且减少 85% 的内存使用。事实证明,该应用程序复制了很多很多次字符串。)
不确定为什么您的应用会像您描述的那样崩溃。既然是内存警告,你应该看看什么是最频繁分配的。
请记住,如果您启用了僵尸检测,则会占用大量额外内存。
关于ios - 使用 Instruments 进行 iOS 开发的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8357071/
虽然我正在运行以测试此 thread 中的一些代码我发现了一件奇怪的事情,如果你考虑下面的程序 import java.util.ArrayList; import java.util.List; p
我只是很好奇为什么使用 using 指令以这种方式设计它。对于 1) struct 被视为命名空间,对于 2) 它不是: struct foo { using type0 = int; }; na
我需要在 ANTLR 中匹配一条消息,该消息包含由/分隔的 2 个字段第一个字段可以有 1..3 数字,第二个字段可以有 1..2 数字, 这不起作用 msg: f1 '/' f2; f1: DIGI
我想定义一个带有 x, y, z 坐标的 3D 矢量。可以使用(+)运算符添加向量,并可以使用length函数计算长度 如果我想编译它,我会收到以下错误: It could refer to eith
所以,今天我一直在测试 Java 的重载技术,但遇到了我无法解释的歧义。基本上,当存在带有原语及其相应包装器的可变参数方法时,编译器会提示并且无法决定选择哪一个,我不明白为什么?人类很容易决定而不是编
发现: Ambiguity while overloading the cast operator 和 C++ Operator Ambiguity 没有帮助 情况: 在容器类的内部我有: opera
我正在使用以下 XPath 片段 ancestor::contribution[1]/preceding-sibling::contribution[@speaker-reference][1] 我的
在尝试依赖可变参数模板实现一些事情时,我偶然发现了一些我无法解释的事情。我将问题归结为以下代码片段: template struct A {}; template class Z, typenam
我最近对 LALR 的研究足以写一篇 LALR generator ,并且我正在尝试为其构造一个 java 或 c# 风格的语法(其开头指定为 here )。 我知道编写解析器生成器需要额外的努力
在阅读 wikipedia article关于修订控制的文章,我发现了一些似乎定义不明确的术语,并且想知道它们是如何在现实世界中实际使用/应用的。具体来说: “主线”与“基线” “分支”与“流” “结
我有以下代码: class A{ public void print(A a){ System.out.println("A 1"); } } class B exte
考虑我试过的以下查询,有两个表,Orders 和 Customers,每个表都有列名称 CustomerID,当我尝试显示两个 CustomerID 时,只有一列显示,我不明白为什么会这样,或者我是理
我正在为基本汇编语言编写一个简单的组合词法分析器/解析器。我的问题是,在解析操作码时,我需要解析一些十六进制,它是指令计数器,可能是立即值等,以及实际的操作码。 基本上,当解析像 add 这样的东西时
我正在尝试在 mysql 中跨两个不同的数据库进行标题搜索,以匹配来自不同来源的数据。在 db1 或 db2 中,标题有时会在一个数据库中以“第一个标题”开头,而在另一个数据库中则以“第一个标题”开头
我对 token 级别的歧义有疑问。 问题看起来是这样的。我的代码看起来像这样,因此标记 t_UN1 具有更高的优先级。 t_ignore = ' \t\v\r' # whitespace ....
在 Main() 的最后一行,我在尝试执行指针操作时遇到错误,但我实际上想做的是调用我在 Foo 类中定义的乘法运算符。如果这不是调用乘法的语法,那是什么? namespace test {
在此page它说: The "00" specifier causes the value to be rounded to the nearest digit preceding the decim
我正在使用 C++ Builder 并使用 TDateTime 数据类型创建 GUI 应用程序。 当我在 TDateTime 对象上使用 MonthOf() 方法时,我得到的值比 TDateTime
$7.3.3/14 (C++03) struct A { int x(); }; struct B : A { }; struct C : A { using A::x; int x(in
我一直在开发一种适配器类,当我在 clang 下遇到问题。当定义了左值引用和右值引用的转换运算符时,您会在尝试从您的类中移出时遇到歧义编译错误(当这样的代码应该没问题时,如 operator cons
我是一名优秀的程序员,十分优秀!