android - Android 基于跟踪和基于采样的方法分析之间的差异及其对报告的 CPU 时间的影响

标签 android android-studio adb android-sdk-tools android-traceview

Android Traceview 中基于跟踪和基于采样的分析方法有何区别?我认为基于跟踪的更准确,但是,它似乎会扭曲实际的 cpu 时间,尤其是在有其他函数调用的情况下。

例如,我想评估一个函数 A,它有两个实现,例如 A-1 和 A-2。

  1. A-1还有一个函数调用,比如A-1-1。
  2. A-2也有更多的函数调用,例如A-1-1,但是A-1-1内部也有一个函数调用,例如A-1-1-1。

现在我认为基于跟踪的分析会为 A-2 报告更高的值,因为它需要跟踪一个额外的函数 A-1-1-1 并且这个额外的 CPU 使用率将在 A- 的 CPU 时间中报告2.我对吗 ?

那么问题就变成了,基于跟踪的方法在报告父函数的实际 cpu 时间时是否考虑了跟踪子方法所占用的 cpu 开销时间?

另一方面,基于采样的方法的问题是它可能无法捕获非常轻量级的函数。如果我的函数占用 0.2 毫秒的 CPU 时间,采样间隔为 1 毫秒怎么办?我用它做了一些实验,但它无法捕获轻量级函数调用。关于它们的差异的任何想法或引用文档?

最后一个问题是相对比较哪个更准确?

最佳答案

据我所知,两种采样方法都没有考虑开销。

Tracing 将正确计算每个函数调用。

采样 将以一定的频率对堆栈进行快照,这可以让您全面了解程序中实际花费的时间。

What if my function takes 0.2 milliseconds cpu time, and sampling interval is 1 millisecond?

  • 如果该函数运行速度很快并且很少被调用,则采样可能无法捕捉到它。但是无论如何,您对很少调用的快速函数不感兴趣。

  • 如果该函数经常被调用(比如每个间隔 50 次)并且没有被采样器捕获,这意味着它永远不会在采样点运行。这意味着它足够快。

通过重构程序的较大部分(采样器向您展示的部分)进行采样和优化。 JVM 上的微优化不会让你走得太远。

关于android - Android 基于跟踪和基于采样的方法分析之间的差异及其对报告的 CPU 时间的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40305096/

相关文章:

android - 是否可以添加旧版本 com.android.support :appcompat-v7 in android studio?

windows - Android Studio 没有响应

android - 在 Android Emulator API 24 Nougat 中更改 SimCountryIso

Android SurfaceView绘图

只有一个 Activity 和多个 fragment 的 Android

android - 错误 : null value in entry: blameLogFolder=null

android - javac 错误 "error: warnings found and -Werror specified"在 ant 中禁用 "-Werror"

android - adb 命令在环境显示设置中禁用 "Always ON"和 "Lift to check phone"

android - Android Studio新建项目报错: "cause: invalid distance too far back",

android - 背景不重复不适用于 android 浏览器