有人能解释visualvm的采样功能背后的科学吗?
我原本以为收集每个特定方法花费的CPU数量需要对应用程序进行分析,但看起来并不像visualvm正在进行任何类型的工具,所以我很想知道它是如何完成的...
答案 0 :(得分:11)
它有一个计时器。 当计时器触发时,它会复制每个线程堆栈的当前内容。 然后它将堆栈帧转换为方法和对象名称,并根据相对方法记录计数。
因此,它不需要检测代码,因此非常轻量级。 但是,因为它没有仪器代码是可以错过短期运行的东西。 因此,它对于跟踪长时间运行的性能问题或快速识别代码中的严重热点非常有用。
答案 1 :(得分:8)
新的VisualVM-Sampler插件看起来像是通过定期轮询受监视的应用程序以获取线程转储或内存直方图来收集性能和内存数据。查看this article了解详情。
答案 2 :(得分:-1)
当我开始内存分析时,JVisualVM花费几秒钟来检测所有类;至少这就是它所说的。
这对我来说肯定是仪器。 :)