JNI.h与JVMTi.h的实现

时间:2013-04-05 06:23:32

标签: java native-code

我正在开发一种软​​件,直到现在只支持JNI而不支持JVMTI。但我无法明确区分为什么实际上JVMTI是有用的,以及它之前是否与JNI一起工作,而不是JVMTI将要添加到它,因为它们似乎在做同样的工作。

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分: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。