我发现JvisualVM中有两个插件,一个是采样器,另一个是探测器。
我还发现他们有类似的用户界面,但结果有很大差异,那么对他们来说意义何在?
为什么他们有很大的不同?
答案 0 :(得分:37)
一般来说:
一个分析器一直在运行,因此它为您提供了完整的调用堆栈;在任何给定的时间点。
采样器只拍摄"快照"在时间的不同时刻。
事情是:当你"简介"一切,然后显着减慢你的JVM;它会在几秒钟内创建巨大的数据量。想一想:分析器会记下发生的每个和任何方法调用!
通常,你最初使用的是一个采样器,当你有"不知道"您的申请中发生了什么。然后你只希望样品告诉你一些事情;喜欢"嘿,在我们的10000个样本中,我们大部分时间都采用这种方法,为什么会这样?"但是一旦你更好地了解你是什么"狩猎"因为,你会尝试做一个完整的分析器运行,以捕获导致某种方法的整个调用链。
然后有一些"中间地带" - 你在哪里描述"一切"但排除事物。换句话说:大多数分析器允许您在此包或该包中的类中说" 不配置文件方法"。但是当然 - 排除包/层次结构只有在你已经非常好地感觉到你打算调查哪个方向时才有意义。