Java 分析器在内部是如何工作的?

Posted

技术标签:

【中文标题】Java 分析器在内部是如何工作的?【英文标题】:How do Java profilers work, internally? 【发布时间】:2013-02-17 06:55:33 【问题描述】:

我正在研究探查器如何在内部工作。

似乎有一个名为JVMPI 的旧API,以及一个基于java.lang.instrument 的“新”API。我的想法是分析器检测所有类的字节码,并将通过套接字信息调用的钩子插入给定程序的开放点,从而与分析器建立通信。这是标准方法吗?他们的方法有很大不同吗?

谢谢

【问题讨论】:

【参考方案1】:

作为参考,“JVM TI 是在 JDK 5.0 中引入的。JVM TI 取代了 Java 虚拟机分析器接口 (JVMPI) 和 Java 虚拟机调试接口 (JVMDI)。”标准分析器jvisualvm 广泛使用API​​,例如执行和监控垃圾收集,正如here 所建议的那样。 Java Management Extensions (JMX) 是通用通信层。

【讨论】:

【参考方案2】:

我不是这方面的专家,但 JVMPI 和 JVMTI 的工作方式似乎不同。

JVMPI 似乎通过代理处理启用分析时 JVM 发出的“事件”来工作。似乎事件发出逻辑是内置在 JVM 中的。

JVMTI 似乎可以通过让代理在加载方法时将字节码注入方法来工作(用于分析)。

(这是对相应规范的简要阅读,如上链接。)

【讨论】:

以上是关于Java 分析器在内部是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 内幕:Flutter 在内部是如何工作的?

sklearn 的 MLP predict_proba 函数在内部是如何工作的?

java NIO内部如何工作,内部使用线程池吗?

SqlDataAdapter 如何在内部工作?

SignalR 如何在内部工作?

Android OkHttp使用与分析