我正在调查剖析器如何在内部工作。
似乎有一个名为JVMPI的旧API,以及基于java.lang.instrument
的“新”API。我有这样的想法,即分析器检测所有类的字节码并插入通过套接字信息调用的钩子到给定程序的开放点,因此建立与分析器的通信。这是标准方法吗?它们在方法上有很大不同吗?
由于
答案 0 :(得分:2)
作为参考,“JVM TI是在JDK 5.0中引入的.JVM TI取代了Java虚拟机概要分析器接口(JVMPI)和Java虚拟机调试接口(JVMDI)。”标准分析器jvisualvm
广泛使用API,例如执行和监视垃圾回收,如建议here。 Java Management Extensions(JMX)是公共通信层。
答案 1 :(得分:1)
我不是这方面的专家,但似乎JVMPI和JVMTI的工作方式不同。
JVMPI似乎可以通过代理处理JVM在启用性能分析时发出的“事件”。似乎事件发射逻辑内置于JVM中。
JVMTI似乎可以工作(用于分析),让代理在加载方法时将字节码注入到方法中。
(这是对上述相关规格的简要介绍。)