查看调用树各部分


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

设置调用树根

如果你分析一个由多个顺序运行的任务组成的用例,可以单独分析每个子树。一旦你找到了这样一个子任务的切入点, 周围的调用树就只是一个干扰,子树中的时间百分比不方便引用整个调用树的根。

为了关注一个特定的子树,JProfiler在调用树和分配调用树视图中提供了设置为根的上下文操作功能。

设置调用树的根后,视图顶部会显示所选根的信息。一个可滚动的标签显示了通往树根的最后几个堆栈元素, 通过单击 显示更多按钮会显示一个包含调用树根整个堆栈的详细对话框。

当你递归地使用设置根操作时,调用堆栈将添加简单的前缀。要返回到上一个调用树, 你可以使用调用树历史的 返回按钮来撤销一次根的改变,或者用上下文菜单重置根并显示全部操作, 一步返回初始树。

改变调用树根最重要的是,热点视图将只显示所选树根的计算数据,而不是整个树的数据。 在热点视图的顶部,你会看到当前的调用树根,就像在调用树视图中一样,以提醒你显示数据的上下文。

移除调用树的部分内容

有时,如果从调用树中移除某些方法后会非常有用。 例如,当你必须一次性解决几个性能问题时,因为你使用的是来自生产系统的快照,不能像在开发环境中那样快速迭代。 在解决了主要的性能问题后,你又想分析第二个问题,但只有从树中删除第一个问题所涉及的部分,才能看的更清楚。

选择调用树中的节点并点击Delete 键或选择上下文菜单中的 移除选定子树可以移除调用 树中的节点及其子树。祖先节点中的时间将被相应修正,就像隐藏节点不存在一样。

有三种移除模式。使用移除所有调用模式,JProfiler在整个调用树中搜索所选方法的所有调用,并将其与整个子树一起删除。 仅移除子树选项只移除所选的子树。最后,将自身时间设置为零会将调用树中所选节点自身时间设置为零。 这对于像Thread.run 这样的容器节点是很有用的,因为这些节点可能包含了大量来自非分析类的时间。

就像对于 设置为根操作,删除的节点会影响热点视图。通过这种方式,你可以检查如果这些方法被优化到不是重要贡献的程度, 热点会是什么样子。

当你删除一个节点时,调用树和热点视图的标题区域都会显示一行被删除的节点数和一个恢复移除的子树按钮。 点击该按钮会弹出一个对话框,在这里你可以选择想要再次显示已经移除的元素。

调用树视图过滤器

调用中第三个对热点视图中显示数据有影响的功能是视图过滤器。当你改变调用树过滤器时, 会对计算出的热点产生很大影响。为了强调与调用树视图的这种相互依存关系, 热点视图在视图上方的一行中显示了调用树视图过滤器,同时还有一个按钮来删除附加过滤器。

设置调用树根、删除调用树的部分内容和视图过滤器可以一起使用,限制是视图过滤器必须最后设置。 只要在调用树中配置了视图过滤器,调用树中的 设置为根>移除选定子树操作不再有效。

与调用图的交互

调用调用树或热点视图中的显示图操作,将显示一个仅限于同一调用树根、不包含被移除的方法并使用配置的调用树视图过滤器的一个图。 在图的顶部,这些变化信息以类似于在调用树中的相似形式显示。

当在图视图本身中创建新图时,向导中的复选框可以让您选择在计算调用图时应考虑这些调用树调整功能中的哪些。 只有当调用树视图中当前使用了相应的功能时,每个复选框才可见。