自动调优和忽略的方法
如果方法调用记录类型设置为插桩,所有被分析的类的方法都会被插桩。这会对执行时间非常短的方法造成显著的开销。如果这些方法被非常频繁地调用,那么测量到的这些方法的时间将会过高。此外,由于插桩,热点编译器可能无法优化它们。在极端情况下,这些方法会成为主要的热点,尽管这在未插桩的运行中并不成立。一个例子是读取下一个字符的XML解析器方法。这样的一个方法返回得非常快,但可能在短时间内被调用数百万次。
当方法调用记录类型设置为采样时,这个问题不存在。然而,采样不提供调用次数,只显示较长的方法调用,并且在使用采样时,几个视图没有其完整的功能。
为了缓解插桩的问题,JProfiler有一个称为自动调优的机制。分析代理会不时检查具有高插桩开销的方法,并将它们传输到JProfiler GUI。在状态栏中,会显示一个警告条目,提示存在开销热点。
您可以点击该状态栏条目查看检测到的开销热点,并选择将它们接受到忽略的方法列表中。这些忽略的方法将不会被插桩。当会话结束时,会显示相同的对话框。
应用新的配置文件设置后,所有忽略的方法将在调用树中缺失。它们的执行时间将被添加到调用方法的自耗时中。如果稍后发现某些忽略的方法在分析视图中是不可或缺的,您可以在会话设置中的忽略的方法选项卡中将它们移除。
忽略的方法的默认配置包括用于动态方法分派的Groovy调用点类,但这使得跟踪实际调用链变得困难。
如果您想手动添加忽略的方法,可以在会话设置中进行,但更简单的方法是选择调用树中的一个方法,并从上下文菜单中调用忽略方法操作。
在过滤器设置中,您还可以通过将过滤器条目的类型设置为“忽略”来忽略整个类或包。从选择中添加过滤器菜单包含依赖于所选节点的操作,并建议忽略类或包直到顶级包。根据所选节点是紧凑分析的还是被分析的,您还会看到更改过滤器为相反类型的操作。
如果您不想看到任何关于自动调优的消息,可以在配置文件设置中禁用它。此外,您可以配置用于确定开销热点的标准。如果同时满足以下两个条件,则一个方法被视为开销热点:
- 所有调用的总时间超过了线程中整个总时间的千分之一的阈值
- 其平均时间低于微秒的绝对阈值