ute*_*ngr 5 android adb android-traceview android-sdk-tools android-studio
Android Traceview 中基于跟踪和基于采样的分析方法有什么区别?我认为基于跟踪的更准确,但是,它似乎会扭曲实际的 cpu 时间,尤其是在有其他函数调用时。
例如,我想评估一个函数 A,它有两个实现,例如 A-1 和 A-2。
现在我认为基于跟踪的分析将报告 A-2 的更高值,因为它需要跟踪一个额外的函数 A-1-1-1,而这个额外的 cpu 使用情况将在 A-2 的 cpu 时间中报告。我对吗 ?
那么问题就变成了,基于跟踪的方法在报告父函数的实际 cpu 时间时是否考虑了跟踪子方法所花费的 cpu 开销时间?
另一方面,基于采样的方法的问题在于它可能无法捕获非常轻量级的函数。如果我的函数需要 0.2 毫秒的 cpu 时间,并且采样间隔是 1 毫秒怎么办?我用它做了一些实验,但它无法捕获轻量级函数调用。关于它们的差异的任何想法或参考文档?
最后一个问题是,对于相对比较,哪一个更准确?
据我所知,这两种采样方法都没有考虑开销。
跟踪将正确计算每个函数调用。
采样将以特定频率对堆栈进行快照,从而为您提供程序中实际花费的时间的总体情况。
如果我的函数需要 0.2 毫秒的 cpu 时间,并且采样间隔是 1 毫秒怎么办?
如果该函数运行得很快并且很少被调用,则采样可能不会捕获它。但无论如何,您对很少调用的快速函数不感兴趣。
如果函数经常被调用(比如每个时间间隔 50 次)并且没有被采样器捕获,这意味着它永远不会在采样点运行。这意味着它足够快。
通过重构程序的较大部分(采样器向您显示的部分)进行采样和优化。JVM 上的微优化不会让您走得更远。
| 归档时间: |
|
| 查看次数: |
1223 次 |
| 最近记录: |