JProfiler帮助文档

查看调用树 (call tree) 的部分内容

调用树 (call tree) 通常包含过多的信息。当您想要减少显示的细节时,有几种可能的方法:您可以将显示的数据限制在一个特定的子树中、移除所有不需要的数据,或者使用更粗粒度的过滤器来显示方法调用 (method call)。所有这些策略都受到 JProfiler 的支持。

设置调用树 (call tree) 根

如果您对一个由多个按顺序运行的任务组成的用例进行分析 (profile),每个子树都可以单独进行分析。一旦找到了此类子任务的入口点,周围的调用树 (call tree) 就会变成干扰,而且子树中的时间百分比还会不便地以整个调用树 (call tree) 的根为基准。

要专注于特定的子树,JProfiler 在调用树 (call tree) 和分配 (allocation) 调用树视图 (view) 中提供了 设置为根 (Set As Root) 上下文操作。

设置调用树 (call tree) 根之后,所选根的相关信息会显示在视图 (view) 的顶部。一个可滚动的标签会显示通向该根的最后几个栈元素,通过点击 显示更多 (Show more) 按钮,可以显示包含调用树 (call tree) 根完整栈的详细信息对话框。

当您以递归方式使用设置根操作时,调用栈 (call stack) 前缀将直接进行拼接。要返回之前的调用树 (call tree),您既可以使用调用树 (call tree) 历史记录中的 返回 (Back) 按钮一次撤销一个根变更,也可以使用上下文菜单中的 重置根并显示全部 (Reset Root And Show All) 操作一步返回原始树。

更改调用树 (call tree) 根最重要的一点在于,热点 (hot spot) 视图 (view) 将仅显示针对所选根计算的数据,而不是整个树的数据。在热点 (hot spot) 视图 (view) 的顶部,您将像在调用树 (call tree) 视图 (view) 中一样看到当前调用树 (call tree) 根,以提醒您所显示数据的上下文。

移除调用树 (call tree) 的部分内容

有时,了解如果某个方法不存在时调用树 (call tree) 的外观会很有帮助。例如,当您必须一次性解决多个性能问题时,就可能遇到这种情况,因为您使用的是来自生产系统的快照 (snapshot),无法像在开发环境中那样快速迭代。在解决了主要性能问题后,您想要分析第二个问题,但只有从树中消除第一个问题后,才能清晰地观察到第二个问题。

通过选中调用树 (call tree) 中的节点及其子树并按下 Delete 键,或从上下文菜单中选择 移除所选子树 (Remove Selected Subtree),可以将它们一起移除。祖先节点中的时间将相应进行修正,就好像这些隐藏节点不存在一样。

共有三种移除模式。在 移除所有调用 (Remove all invocations) 模式下,JProfiler 会在整个调用树 (call tree) 中搜索所选方法的所有调用,并将它们与其整个子树一起移除。仅移除子树 (Remove subtree only) 选项仅移除所选子树。最后,将自耗时设为零 (Set self-time to zero) 会将所选节点保留在调用树 (call tree) 中,但将其自耗时 (self-time) 设置为零。这对于像 Thread.run 这样可能包含大量来自未被分析 (profiled) 类的时间的容器 (container) 节点非常有用。

就像 设置为根 (Set As Root) 操作一样,被移除的节点也会影响热点 (hot spot) 视图 (view)。通过这种方式,您可以检查如果将这些方法优化到不再构成重大影响时,热点 (hot spot) 会是什么样子。

移除节点后,调用树 (call tree) 和热点 (hot spot) 视图 (view) 的标题区域都会显示一行内容,其中包含已移除节点的计数以及一个 恢复移除的子树 (Restore Removed Subtrees) 按钮。点击该按钮将弹出一个对话框,您可以在其中选择应重新显示的已移除元素。

调用树 (call tree) 视图 (view) 过滤器

调用树 (call tree) 中第三个对热点 (hot spot) 视图 (view) 中显示的数据产生影响的功能是视图 (view) 过滤器。更改调用树 (call tree) 过滤器时,会对计算得出的热点 (hot spot)产生很大影响。为了强调与调用树 (call tree) 视图 (view) 的这种相互依赖关系,热点 (hot spot) 视图 (view) 会在该视图上方的一行中显示调用树 (call tree) 视图 (view) 过滤器,同时附带一个用于移除附加过滤器的按钮。

设置调用树 (call tree) 根、移除调用树 (call tree) 的部分内容以及视图 (view) 过滤器可以结合使用,但限制是必须最后设置视图 (view) 过滤器。一旦在调用树 (call tree) 中配置了视图 (view) 过滤器,设置为根 (Set As Root) 和 移除所选子树 (Remove Selected Subtree) 操作将不再起作用。

与调用图 (call graph) 的交互

在调用树 (call tree) 或热点 (hot spot) 视图 (view) 中调用 显示图形 (Show Graph) 操作将显示一个图形 (graph),该图形限制在相同的调用树 (call tree) 根内、不包含已移除的方法,并使用已配置的调用树 (call tree) 视图 (view) 过滤器。在图形 (graph) 的顶部,有关这些更改的信息以与调用树 (call tree) 中类似的形式显示。

在图形 (graph) 视图 (view) 本身中创建新图形 (graph) 时,向导中的复选框可让您选择在计算调用图 (call graph) 时应考虑哪些调用树 (call tree) 调整功能。仅当调用树 (call tree) 视图 (view) 中当前使用了相应功能时,每个复选框才可见。