2

到目前为止,我正在开发一个只支持 JNI 而不是 JVMTI 的软件。但是我无法明确区分为什么 JVMTI 实际上是有帮助的,以及它以前是否与 JNI 一起工作,而不是 JVMTI 将要添加到其中的内容,因为它们似乎在做某种相同的工作。

4

2 回答 2

5

顾名思义,JNI用于将本机代码集成到您的 Java 应用程序中。这意味着您可以从您的 java 代码中调用用 C 编写的函数。

现在JVMTI不一定要向 JNI 添加任何内容,因为它的用途完全不同。它为分析器、调试器等工具提供了 JVMTI 代理和 Java 虚拟机之间的通信方式……它仅使用 JNI,但并没有真正添加任何东西。

于 2013-05-05T21:03:20.513 回答
2

JNI使 Java 应用程序有能力使用其他语言(例如,c/c++ 或汇编语言)实现的库。它为 JVM 供应商和应用程序开发人员提供了一个标准的 VM 接口。

JVMTI是 JPDA 的最低级别。这张图片说明了它:http ://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html

       Components                          Debugger Interfaces
            /    |--------------|
           /     |     VM       |      <------- JVM TI
           \     |   back-end   |
            \    |--------------|
            /           |              <------- JDWP 
            \           |
                 |--------------|
                 | front-end    |
                 |--------------|      <------- JDI 
                 |      UI      |
                 |--------------|

总之,JVMTI 只是使用 JNI。

于 2014-05-07T13:28:25.833 回答