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