4

基本问题:JVM 提供了 JVMTI 用于分析和调试 JVM 的原生 API。JVM 检测也做同样的事情(对吗?)。如果是,两者有什么区别?

4

3 回答 3

3

我不认为 Instrumentation 是 JVMTI 是 Instrumentation 的超集。因为这两者都可以独立使用。

JVMTI 基于事件,在事件处理程序中,我们可以捕获有关 JVM 的所需信息。

Instrumentation 是我们修改字节码的东西,因此在运行时在类中的所需位置添加额外的代码,然后再加载到 JVM 中。这段额外的代码在执行时将有助于收集分析器所需的信息。

可以借助 ASM 等各种第三方 jar 来实现检测。

根据我的知识和经验,这两者都用于 Java 分析,而不是本机分析。

可能需要阅读更多文档并尝试不同的示例以更好地理解。

于 2011-06-17T12:54:46.507 回答
0

JVMTI 是为调试、分析等提供各种事件的基本功能......它提供的领域之一是访问拦截(和重新定义)类。java.lang.instrument 是 JVMTI 之上的 Java 包装器,它提供了一种很好的、​​简单的、可访问的方式来获取类加载事件。

将 JVMTI 视为 java.lang.instrument 的纯超集,但需要用户编写 C 代码。

于 2011-06-15T13:22:20.023 回答
0

JVMTI 提供了调试器所需的所有功能,但是,如果您想要超过 JVMTI 提供的功能,则需要使用 Instrumentation。

于 2011-06-15T09:41:32.907 回答