过滤器和实时交互
当在堆遍历器中寻找感兴趣的对象时,你经常会发现一个对象集中有太多实例来自同一个类。 为了根据你的特定关注点进一步修剪对象集,选择标准可以涉及它们的属性或引用。 例如,你可能对包含特定属性的 HTTP 会话对象感兴趣。在堆遍历器的合并传出引用视图中, 你可以执行涉及整个对象集的引用链的选择步骤。
然而,在传出引用视图中,你可以看到单个对象,提供了更强大的功能,可以进行约束引用和原始字段的选择步骤。
当你在传出引用视图中选择一个顶层对象、一个原始值或一个引用时,应用过滤器→通过限制所选值 操作会被启用。根据选择的不同,过滤值对话框提供了不同的选项。无论你配置什么选项,你总是隐含地添加约束条件, 即新对象集中的对象必须具有与所选对象一样的传出引用链。过滤器总是通过将当前对象集限制为可能较小的对象集来对顶层对象起作用。
约束原始值在HPROF和JProfiler堆快照中都可以使用。对于引用类型,你可以要求JProfiler过滤非空值、空值和选定类的值。
通过toString()
方法的结果进行过滤,只有在实时会话中才可以使用,
除了java.lang.String
和java.lang.Class
对象,JProfiler可以自己弄清楚。
最强大的过滤器类型是代码过滤器片段。在脚本编辑器中,你可以访问对象或引用,并可以编写一个表达式或脚本, 其布尔返回值决定一个实例是否应该保留在当前对象集中。
当然,这个功能只适用于实时会话,因为JProfiler需要访问实时对象。 另一个考虑因素是,一个对象可能在生成堆快照后就被垃圾回收了。 在这种情况下,当代码片段过滤器被执行时,这样的对象不会被包含在新的对象集中。
除了过滤器之外,在传出引用视图中还有两个与单个对象进行交互的功能: 显示toString()值操作
会调用在视图中当前可见的所有对象的toString()
方法,并直接在引用节点中显示。
节点可能会变得很长,文本可能会被截断。使用 显示节点详情操作,可以帮助你查看完整文本。
比调用toString()
方法更通用的从对象获取信息的方法是运行一个返回字符串的任意脚本。
当选中一个顶层对象或一个引用,显示toString值旁边有一个运行脚本操作允许你做到这一点。
该脚本执行的结果会显示在一个单独的对话框中。