将当前应用程序的运行时特性与先前版本进行比较,是防止性能退化的常用质量保证技术。 在单个分析会话 (session) 范围内解决性能问题时,它也很有帮助,例如您可能想要比较两个不同的用例, 并找出为什么其中一个比另一个更慢。在这两种情况下,您都可以保存包含所关注记录数据的快照, 并通过从菜单中调用 Session→Compare Snapshots in New Window 或点击启动中心中 Open Snapshots 选项卡上的 Compare Multiple Snapshots 按钮,来使用 JProfiler 中的快照比较功能。
选择快照
比较是在单独的顶级窗口中创建和查看的。首先,您在快照选择器中添加若干快照。 然后,您可以通过选择感兴趣的快照并点击比较工具栏按钮,从列表中列出的两个或多个快照创建比较。 列表中快照文件的顺序非常重要,因为所有比较都会假定列表中靠后的快照是在较晚的时间记录的。 除了手动排列快照之外,您还可以按名称或创建时间对它们进行排序。
与 JProfiler 主窗口中的视图 (view) 不同,比较视图具有显示在顶部的固定视图参数, 而不是允许您即时调整参数的下拉列表。所有比较都会显示用于收集比较参数的向导, 并且您可以使用相同的参数多次执行相同的比较。向导会记住之前调用时的参数, 因此如果您比较多组快照,则无需重复配置。在任何时候,您都可以使用 Finish 按钮提前完成向导,或者通过点击索引中的步骤跳转到另一个步骤。
当比较处于活动状态时,被分析 (profiled) 的快照会带有数字前缀显示。对于针对两个快照进行的比较, 显示的差异是快照 2 的测量值减去快照 1 的测量值。
对于 CPU 比较,您可以将同一个快照同时用作第一个和第二个快照,并在向导中选择不同的线程或线程组。
使用表格进行比较
最简单的比较是“Objects”内存比较。它可以比较来自 Heap Walker 的“All objects”、 “Recorded objects”或“Classes”视图 (view) 的数据。比较中的各列显示实例计数和大小的差异, 但只有 Instance Count 列显示双向条形图,其中增加以红色向右显示,而减少以绿色向左显示。
在视图设置对话框中,您可以选择希望该条形图显示绝对变化量还是百分比。另一个值显示在括号中。 此设置还决定了该列的排序方式。
第一个数据列中的测量指标称为主测量值,您可以在视图设置中将其从默认的实例计数切换为浅层大小(Shallow Size)。
表格的上下文菜单提供了快捷方式,可使用相同的比较参数针对所选类进入其他内存比较。
与对象比较类似,CPU 热点 (hot spot)、探针 (probe) 热点和分配 (allocation) 热点比较也显示在类似的表格中。
使用树进行比较
对于 CPU 调用树 (call tree)、分配调用树和探针调用树中的每一个,您都可以计算另一棵树来显示所选快照之间的差异。 与常规调用树视图 (view) 相比,行内条形图现在会显示变化量,增加显示为红色,减少显示为绿色。
根据当前的任务,如果您只查看同时存在于两个快照文件中且从一个快照文件到另一个快照文件发生变化的调用栈 (call stack), 可能会更方便分析。您可以在视图设置对话框中更改此行为。
对于 CPU 和探针调用树比较,比较平均时间而不是总时间可能会很有用。这是向导“View parameters”步骤中的一个选项。
遥测比较
对于遥测 (telemetry) 比较,您可以同时比较两个以上的快照。如果您在快照选择器中未选择任何快照, 向导将假定您想要比较所有快照。遥测比较没有时间轴,而是将带编号的选定快照显示为序数 X 轴。 工具提示包含快照的全名。
比较会从每个快照中提取一个数值。由于遥测数据具有时间分辨率,因此有多种提取方式。 向导的“comparison type”步骤使您可以选择使用保存快照时的值、计算最大值或查找所选书签 (bookmark) 处的值。

























