JvisualVM中的采样器和分析器有什么区别?
我发现JvisualVM中有两个插件,一个是采样器,另一个是分析器。
我还发现它们具有相似的UI,但是结果有很大的不同,那么它们的差异意味着什么呢?
为什么它们有很大的不同?
我发现JvisualVM中有两个插件,一个是采样器,另一个是分析器。
我还发现它们具有相似的UI,但是结果有很大的不同,那么它们的差异意味着什么呢?
为什么它们有很大的不同?
通常:
探查器一直在运行,因此它为您提供了完整的调用堆栈;在任何给定的时间点。
采样器仅在不同的时间点拍摄“快照”。
问题是:当你“分析”一切时,这会大大减慢你的JVM速度;它在几秒钟内创建了大量的数据。想想看:分析器将写下发生的每个和任何方法调用!
因此,通常情况下,当您“不知道”应用程序中发生了什么时,您最初使用采样器。然后你只是希望样本告诉你一些东西;比如“嘿,在我们的10K样本中,我们大部分时间都在用这种方法,为什么会这样?”但是,一旦您更好地了解了“狩猎”的内容,您就会尝试执行完整的探查器运行,以捕获导致某种方法的整个调用链。
然后有一些“中间地带” - 你描述“一切”,但排除事物。换句话说:大多数探查器允许您说“不要分析这个或那个包中的类中的方法”。但是,当然 - 排除包/层次结构只有在你已经很好地感觉到你打算调查哪个方向时才有意义。