调用树分析
调用树显示了JProfiler记录的实际调用栈。在分析调用树时,可以对调用树应用一些转换,以便于解释。这些转换可能耗时,并以一种与调用树视图中的功能不兼容的方式改变输出格式,因此会创建新的视图来显示分析结果。
要执行这样的分析,请在调用树视图中选择一个节点,然后从工具栏或上下文菜单中选择一个调用树分析操作。
在调用树视图下方将创建一个嵌套视图。如果再次调用相同的分析操作,分析将被替换。要同时保留多个分析结果,可以固定结果视图。在这种情况下,下次进行相同类型的分析时将创建一个新视图。对于固定的视图,视图顶部会显示一个重命名按钮,可以用来更改在左侧视图选择器中显示的名称。
在实时会话中,结果视图不会与调用树一起更新,而是显示分析时的数据。要重新计算当前数据的分析,请使用重新加载操作。如果调用树本身需要重新计算,例如在禁用自动更新的分配树中,重新加载操作也会处理这一点。
调用树快照
"创建调用树快照"分析只是创建当前调用树的静态副本。这对于在不保存和打开JProfiler快照的情况下比较不同的用例非常有用。此外,它还提供了一种在调用树仍在记录时处理其冻结副本的方法。
"创建调用树快照"分析仅在"CPU视图"部分的"调用树"视图中可用。如果固定调用树快照视图,可以同时拥有多个调用树快照。与其他分析不同,调用树快照会保存在JProfiler快照中,因为它们构成了独立的数据集。
除了调用树视图中可用的调用树分析外,调用树快照还具有"计算热点"操作,该操作计算父视图的热点,类似于"CPU视图"部分的"热点"视图。从嵌套在调用树快照视图下方的视图中访问的所有分析都使用其父调用树快照的数据,而不是顶级调用树视图的数据。
折叠递归
使用递归的编程风格会导致难以分析的调用树。"折叠递归"调用树分析计算一个将所有递归折叠的调用树。调用树中当前选择的父节点作为分析的 调用树根。要分析整个调用树,请选择一个顶级节点。
当同一方法在调用栈的更高位置已经被调用时,检测到递归。在这种情况下,子树从调用树中移除并缝合回该方法的第一次调用。调用树中的那个节点前缀一个图标,其工具提示显示递归次数。在该节点下,不同深度的栈被合并。合并栈的数量也显示在工具提示中。折叠递归的总数显示在标题中,位于为原始调用树设置的调用树参数信息上方。
对于简单递归,合并栈的数量是递归次数加一。因此,递归工具提示显示"1递归"的节点将包含一个树,其中节点在其递归工具提示中显示"2合并栈"。在更复杂的情况下,递归是嵌套的,并产生重叠的合并调用树,因此合并栈的数量从栈深度到栈深度不等。
在从调用树中移除子树以在更高位置合并的点上,插入一个特殊的
分析累积的外部调用
在调用树中,可以看到选定方法的外部调用,但仅限于该方法被调用的一个特定调用栈。相同的感兴趣方法可能在不同的调用栈中被调用,通常分析所有这些调用的累积调用树以获得更好的统计数据是有用的。"计算累积外部调用"分析显示一个调用树,该树汇总了选定方法的所有外部调用,而不管该方法是如何被调用的。
对于选定的方法,JProfiler收集其所有顶级调用,而不考虑递归调用,并在结果树中累积它们。标题显示在该过程中汇总的顶级调用点的数量。
在视图顶部,有一个复选框,允许您在结果树中折叠递归,类似于"折叠递归"分析。如果递归被折叠,顶级节点和外部调用的第一级显示与方法调用图相同的数字。
计算回溯
"计算回溯"分析补充了"计算累积外部调用"分析。与后者一样,它汇总了选定方法的所有顶级调用,而不考虑递归调用。然而,它不是显示外部调用,而是显示促成选定方法调用的回溯。调用起始于最深的节点,并向选定方法的顶部推进。
此分析类似于热点视图,只是默认情况下它汇总选定方法的总时间而不是自耗时,而热点视图仅显示自耗时占总时间显著比例的方法。在视图顶部有一个标记为汇总模式的单选按钮组,可以设置为自耗时。选择该选项后,选定方法的汇总值与热点视图中的默认模式匹配。
在回溯中,回溯节点上的调用计数和时间仅与选定方法相关。它们显示了沿着特定调用栈的调用对选定方法值的贡献。类似于"计算累积外部调用"分析,您可以折叠递归,回溯中的第一级相当于方法调用图中的传入调用。
调用图中的调用树分析
在调用图中,每个方法都是唯一的,而在调用树中,方法可以出现在多个调用栈中。对于一个选定的方法,"计算累积外部调用"和"计算回溯"分析是调用树和调用图视角之间的桥梁。它们将选定方法置于中心,并以树的形式显示外部和传入调用。使用显示调用图操作,您可以随时切换到完整图形。
有时,您希望从相反的方向切换视角,从图形切换到树视图。当您在调用图中工作时,可以为图中任何选定节点显示累积外部调用和回溯为树,使用与调用图中相同的调用树分析。
在IntelliJ IDEA集成中,编辑器边栏中显示的调用图包含直接显示这些树的操作。
显示分配的类
与之前的调用树分析略有不同的是,分配调用树和分配热点视图中的"显示类"分析。它不会将调用树转换为另一棵树,而是显示一个包含所有分配类的表。结果视图类似于 记录对象视图,但仅限于特定的分配点。
在显示调用树的分析结果视图中,"计算累积外部调用"和"计算回溯到选定方法"分析均可用。调用它们会创建具有独立参数的新顶级分析。先前分析结果视图中的任何调用树移除都不会反映在新的顶级分析中。
另一方面,显示类操作在从调用树分析结果视图中使用时不会创建新的顶级分析。相反,它会创建一个嵌套分析,该分析位于原始视图下方的两级。