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