JProfiler帮助文档

比较快照

将当前应用程序的运行时特性与先前版本进行比较是一种常见的质量保证技术,可以防止性能回退。在单次分析会话(profiling session)范围内解决性能问题时,这种比较也非常有用,例如你可能希望比较两种不同的用例,找出为何其中一个比另一个慢。在这两种情况下,你都需要保存包含感兴趣数据的快照,并通过菜单中的 会话 (Session)→在新窗口中比较快照 (Compare Snapshots in New Window) 或在启动中心的 打开快照 (Open Snapshots) 选项卡上点击 比较多个快照 (Compare Multiple Snapshots) 按钮,使用 JProfiler 的快照比较功能。

选择快照

比较操作会在一个独立的顶层窗口中创建和查看。首先,你需要在快照选择器中添加若干快照。然后,可以从列表中选择两个或多个感兴趣的快照,并点击比较工具栏按钮来创建比较。列表中快照文件的顺序很重要,因为所有比较都假定列表下方的快照是在更晚的时间记录的。除了手动排列快照外,你还可以按名称或创建时间对快照进行排序。

与 JProfiler 主窗口中的视图不同,比较视图具有固定的视图参数,这些参数显示在顶部,而不是可以动态调整参数的下拉列表。所有比较都会显示用于收集比较参数的向导(wizard),你可以使用相同的参数多次执行同样的比较。向导会记住上一次调用时的参数,因此如果你要比较多个快照集,无需重复配置。在任何时候,你都可以通过 完成 (Finish) 按钮快速结束向导,或点击索引中的步骤跳转到其他步骤。

当比较处于激活状态时,被分析的快照会以数字前缀显示。对于只涉及两个快照的比较,显示的差异为快照2的测量值减去快照1的测量值。

对于 CPU 比较,你可以将同一个快照作为第一个和第二个快照,并在向导中选择不同的线程或线程组进行比较。

表格比较

最简单的比较是“对象 (Objects)”内存比较。它可以比较堆遍历器(heap walker)中“所有对象 (All objects)”、“已记录对象 (Recorded objects)”或“类 (Classes)”视图的数据。比较表格中的列显示实例数量和大小的差异,但只有 实例数量 (Instances Count) 列会显示双向条形图,增加部分用红色向右显示,减少部分用绿色向左显示。

在视图设置对话框中,你可以选择该条形图显示绝对变化还是百分比。另一种数值会以括号形式显示。此设置也决定了该列的排序方式。

第一数据列中的测量值称为主度量(primary measure),你可以在视图设置中将其从默认的实例数量切换为浅层大小(shallow sizes)。

表格的上下文菜单为你提供了使用相同比较参数和所选类,快速进入其他内存比较的方式。

与对象比较类似,CPU 热点、探针热点和分配热点的比较也会以类似的表格形式展示。

树形比较

对于每个 CPU 调用树(call tree)、分配调用树和探针调用树,你都可以计算出另一个显示所选快照之间差异的树。与常规调用树视图不同,内联条形图现在显示的是变化量,增加部分用红色,减少部分用绿色。

根据具体任务,你可能只想看到同时存在于两个快照文件中且发生变化的调用栈(call stack)。你可以在视图设置对话框中更改此行为。

对于 CPU 和探针调用树比较,比较平均时间而不是总时间可能更有意义。这可以在向导的“视图参数 (View parameters)”步骤中设置。

遥测 (telemetry) 比较

对于遥测比较,你可以同时比较两个以上的快照。如果你在快照选择器中未选择任何快照,向导会假定你想比较所有快照。遥测比较没有时间轴,而是将编号的选中快照作为序数 x 轴显示。工具提示中包含快照的完整名称。

比较会从每个快照中提取一个数值。由于遥测数据是按时间分辨的,因此有多种提取方式。向导的“比较类型 (comparison type)”步骤允许你选择使用保存快照时的数值、计算最大值,或查找某个书签(bookmark)处的数值。