适用于 Android 的“实时”内存分析工具

2024-03-06

是否有适用于 Android 的“实时”内存分析器工具(类似于 XCode 中的 Instruments)?大多数对内存分析的搜索都会引导我使用内存分析器工具(这很棒),但我非常感谢一个可以动态显示哪些类在应用程序的生命周期中消耗(和释放)内存的工具,因为它正在执行。

注:我是not正在寻找适用于 Android 的内存分析工具(内存分析器工具非常适合我)。我遇到的所有方法/工具,都会对堆进行快照并将其保存到文件中。我正在寻找一种工具,它可以提供有关各种对象正在使用堆的哪些部分的实时计数器/更新,并且这是在秒/亚秒的基础上更新的。 Android 可能无法做到这一点。然而,我还没有以某种方式找到明确的答案。


看看这个视频here http://youtu.be/Oq05KqjXTvs在大约 35 分钟的时间里,他们展示了如何分析您的应用程序,但不确定您是否可以“实时”进行分析。


更多信息来自 milk.com 上的这篇文章 http://milk.com/kodebase/dalvik-docs-mirror/docs/heap-profiling.html:

自 android 1.6 以来就没有尝试过此操作,不确定是否可以实时执行此操作,但您过去可以通过以下方式生成堆数据:

在设备上获取命令 shell:

$ adb shell

您可以使用 id 命令验证您是否以 root 身份运行。响应应类似于 uid=0(root) gid=0(root)。如果没有,请输入 su 并重试。如果 su 失败,那你就不走运了。

接下来,确保目标目录存在:

# mkdir /data/misc
# chmod 777 /data/misc

使用 ps 或 DDMS 确定应用程序的进程 ID,然后向目标进程发送 SIGUSR1:

# kill -10 <pid>

该信号导致 GC,然后是堆转储(完全准确,它们实际上是同时发生的,但堆转储中的结果反映了 GC 后的状态)。这可能需要几秒钟,因此您必须观察 GC 日志消息才能知道它何时完成。

Next:

# ls /data/misc/heap-dump*
# exit

使用 ls 检查文件名,然后 exit 退出设备命令 shell。

您应该看到两个输出文件,名为 /data/misc/heap-dump-BLAH-BLAH.hprof 和 .hprof-head,其中 BLAH 是运行时生成的值,可确保文件名是唯一的。将它们从设备上拉下来并删除设备端副本:

$ adb pull /data/misc/heap-dump-BLAH-BLAH.hprof tail.hprof
$ adb pull /data/misc/heap-dump-BLAH-BLAH.hprof-head head.hprof
$ adb shell rm /data/misc/heap-dump-BLAH-BLAH.hprof /data/misc/heap-dump-BLAH-BLAH.hprof-head

将它们合并在一起并删除中间体:

$ cat head.hprof tail.hprof > dump.hprof
$ rm head.hprof tail.hprof

您现在在 dump.hprof 中拥有 hprof 转储。

数据文件格式在常见的 hprof 格式的基础上略有增强,并且由于许可限制,修改后的 hat 工具无法分发。转换工具 hprof-conv 可用于从输出中去除 Android 特定部分。该工具首次包含在 1.5 中,但适用于旧版本的 Android。

转换后的输出应该适用于任何 hprof 数据分析器,包括 jhat(Sun JDK 中免费提供)和 Eclipse MAT。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

适用于 Android 的“实时”内存分析工具 的相关文章

随机推荐

  • XSD 1.1 替代测试 text() 的内容

    这是我想做的
  • 与 RabbitMQ 相比,Amazon SQS 的性能较慢

    我想在我的 Web 应用程序中集成消息队列中间层 我测试了 Rabbitmq 和 Amazon SQS 但发现 Amazon SQS 速度很慢 我在 Amazon SQS 中每秒收到 80 个请求 而在 Rabbitmq 中每秒收到 200
  • 从 ILogger 访问当前 HttpContext

    在 ASP NET Core 1 0 中 我有一个自定义实现ILoggerProvider and ILogger接口 我希望能够从以下位置访问 HttpContextLog method 看来我需要注入一个IHttpContextAcce
  • 没有事前发生的安全发布?除了决赛之外还可以吗?

    根据 JCP 16 2 2 安全发布 这个happens before保证实际上是一个比安全出版更有力的可见性和订购承诺 当 X 从 A 安全地发布到 B 时 安全发布保证了 X 状态的可见性 但不保证 A 可能接触过的其他变量的状态的可见
  • 用于变量名称的 R 循环来运行线性回归模型

    首先 我对此很陌生 所以我的方法 想法可能是错误的 我已使用 R 和 R studio 将 xlsx 数据集导入到数据框中 我希望能够循环遍历列名以获取所有具有精确 的变量10 以便运行简单的线性回归 所以这是我的代码 indx lt gr
  • PHP - MD5、SHA、哈希安全

    我是一个用 PHP 构建的新网站的开发人员 我想知道什么是最好的 用于散列的东西 我已经研究过 md5 和 sha1 但还有更安全的吗 如果这是一个菜鸟问题 我很抱歉 但我是 PHP 安全新手 我正在努力让我的 网站尽可能安全 还有什么是盐
  • Restkit今天突然停止编译

    我很长一段时间以来都在我的项目中使用RestKit 使用CocoaPods Podfile pod RestKit gt 0 26 0 今天 由于未知的原因 我的项目不再编译 据我所知 我没有更改任何项目设置或任何内容 我在 RKObjec
  • CUDA 中什么样的变量会消耗寄存器?

    global void add int c const int a const int b int x blockIdx x int y blockIdx y int offset x y gridDim x c offset a offs
  • jQuery 多重选择器 + find() 与 Children()

  • 将 .NET MVC 应用程序中的 User.Identity 映射到 Active Directory 用户

    我正在编写一个 NET MVC 5 应用程序 该应用程序位于 Intranet 上 使用 Windows 身份验证 需要查询 Active Directory 以查看哪些组可用 然后检查用户是否属于该角色 组名和用户名的来源将是活动目录 然
  • 带有 eval 代码执行的heredoc

    我尝试了几种方法来尝试让它工作 但没有运气 我有一个像这样的页面 示例 h1 blah blah h1 p blah blah blah blah blah blah blah blah blah p jj 这导致没有输出什么的 想不出解决
  • Android 设备中启动任何应用程序时是否可以收到通知

    我希望当我在设备中启动任何应用程序时 它应该通知我 以编程方式 运行 启动 时是否可以收到任何应用程序的通知 您可以通过以下方式获取当前正在运行的进程ActivityManager getRunningAppProcesses http d
  • Hackage 使用哪种 Markdown 方言来呈现 README?

    Hackage 已经能够显示 Markdown 自述文件一阵子 https www well typed com blog 2015 05 recent hackage improvements 但正如人们可以看到的 例如Hackage 页
  • 为什么“a”是对象引用的 Java 字节码前缀? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 特定于类型的 Java 字节码指令具有单字符前缀来指定该指令相关的类型 Taken from Wikipedia s entry on J
  • Facebook、IE 和 P3P

    在过去的几周里 我试图找出 IE 中会话 cookie 保存的问题 我们的应用程序在 iFrame 内运行 因此 cookie 被视为第三方 我知道 IE 6 和 7 需要 P3P 标头 但出于某种原因 我仍然看到许多 IE6 7 用户从不
  • abraham 的 twitteroauth 库适用于 update_with_media 吗?

    abraham 的 twitteroauth 库适用于 update with media 吗 我正在使用下面的代码 但它返回我 stdClass 对象 请求 gt 1 statuses update with media json 错误
  • 正确的向量内存管理

    我正在制作一个游戏 我有一个子弹飞来飞去的矢量 当子弹完成后 我执行Bullets erase bullets begin i 然后子弹就消失了 然而它似乎并没有失去记忆 如果我创建 5000 颗子弹 然后在它们消失后再创建 5000 颗
  • @Mock 和 @InjectMocks 之间的区别

    有什么区别 Mock and InjectMocks在 Mockito 框架中 Mock创建一个模拟 InjectMocks创建类的实例并注入使用创建的模拟 Mock or Spy 注释到此实例中 注意你必须使用 RunWith Mocki
  • C# 中带有附加行的十字准线光标

    如何在屏幕截图上制作带有帮助线的十字准线光标 我知道如何制作十字光标 this Cursor System Windows Forms Cursors Cross 也可以是这样的 就像在 CAD 软件中一样 这是我使用的代码 x 和 y 是
  • 适用于 Android 的“实时”内存分析工具

    是否有适用于 Android 的 实时 内存分析器工具 类似于 XCode 中的 Instruments 大多数对内存分析的搜索都会引导我使用内存分析器工具 这很棒 但我非常感谢一个可以动态显示哪些类在应用程序的生命周期中消耗 和释放 内存