自动调整和忽略的方法
如果将方法调用记录类型设置为instrumentation,所有分析类的方法都会被测量,这对于执行时间很短的方法来说, 会产生很大的开销。如果这样的方法被频繁调用,那么这些方法的测量时间就会过高。同时,由于instrumentation, 热点编译器可能无法对它们进行优化。在极端情况下,这类方法会成为主要的热点,尽管这对于没有被检测的运行来说并不正确。 一个例子是一个XML解析器读取下一个字符的方法,这样的方法返回速度非常快,但可能在短时间内被调用数百万次。
当方法调用记录类型设置为采样时,就不存在这个问题。但是,采样并不能提供调用次数,只能显示较长的方法调用, 而且在使用采样时,几个视图的功能并不齐全。
为了缓解instrumentation的问题,JProfiler有一个叫做自动调节的机制。分析代理会不时地检查instrumentation开销很高的方法, 并将它们传送到JProfiler GUI中。在状态栏中,将显示一个提醒存在开销热点的条目。
您可以单击该状态栏条目来查看检测到的开销热点,并选择将其纳入忽略方法列表。这些忽略的方法列表不会被检测。 当会话终止时,会显示同样的对话框。
当你应用新的分析设置后,所有被忽略的方法将从调用树中消失。它们的执行时间将被添加到调用方法的自身时间中。 如果后来发现一些被忽略的方法在分析视图中是不可缺少的,你可以从会话设置的被忽略的方法选项卡中移除它们。
忽略方法的默认配置包括Groovy的调用站点类,这些类用于动态方法的调度,但使其难以遵循实际的调用链。
如果你想手动添加被忽略的方法,你可以在会话设置中这样做,但一个更简单的方法是在调用树中选择一个方法, 然后调用上下文菜单中的忽略方法操作。
在过滤器设置中,您也可以通过将过滤项的类型设置为"被忽略"来忽略整个类或包。 列表中的 为所选内容添加过滤器菜单包含的操作是根据所选节点,建议忽略的类或当前层级到顶层的包。 根据所选节点是压缩分析还是被分析,您还可以看到将过滤器改为相反类型的操作。
如果不想看到任何有关自动调节的消息,可以在分析设置中禁用它。 此外,还可以配置决定开销热点的条件。如果满足以下两个条件, 一个方法会被认为是开销热点:
- 它的所有调用的总时间超过了线程中整个总时间的一个千分之几阈值。
- 其平均时间低于一个以微秒为单位的绝对阈值。