Java如何';如果JVMTI不是跨平台的,那么JDI是什么?
所以Java的调试接口使用JVMTI作为后端…但是JVMTI需要在目标体系结构上编译,那么这些JVMTI函数是由JDI预先编译并作为库随JDK一起提供的吗?这意味着我可以在不使用JDI的情况下使用这些预编译库……对吗?我假设只有少数几个函数已经编译好了,但是如果我确实需要这些函数,那么我就不需要亲自编译它们了……请看:Java如何';如果JVMTI不是跨平台的,那么JDI是什么?,java,jvm,jvm-hotspot,jvmti,jdi,Java,Jvm,Jvm Hotspot,Jvmti,Jdi,所以Java的调试接口使用JVMTI作为后端…但是JVMTI需要在目标体系结构上编译,那么这些JVMTI函数是由JDI预先编译并作为库随JDK一起提供的吗?这意味着我可以在不使用JDI的情况下使用这些预编译库……对吗?我假设只有少数几个函数已经编译好了,但是如果我确实需要这些函数,那么我就不需要亲自编译它们了……请看: /|--------------| /| VM| 调试对象----(|-------------|有没有办法不使用JDI调用此本机库?因此,在不以调试模式启动应用程序的情况下…@
/|--------------|
/| VM|
调试对象----(|-------------|有没有办法不使用JDI调用此本机库?因此,在不以调试模式启动应用程序的情况下…@Nfff3因为JVMTI是本机接口,本机软件可以使用它。当您按照此答案中给出的链接获取此接口的描述时。这并不意味着您可以使用我们您只需将“在调试模式下”即“使用jdwp代理”与“使用我的JVMTI代理”交换即可.@Nfff3 JDWP agent是一个JVM TI代理,它只支持附加到JVM的加载时间。为了使用该代理,必须在JVM命令行参数中指定它。这实际上与“在调试模式下启动应用程序”相同。谢谢,我现在明白了。基本上,“调试”没有什么特别之处它只是意味着一个JVTMI代理(称为JDWP)当应用程序启动时加载。这个本机代理在套接字上与JDI通信,这与语言无关。我对此感兴趣,因为我有一个用例,我想在短时间内多次调用一些JDI方法,并希望减少执行时间。也许我可以修改JDWP代理,以便能够调用通过JNI从Java执行操作,不使用套接字。也许会更快。
/ |--------------|
/ | VM |
debuggee ----( |--------------| <------- JVM TI - Java VM Tool Interface
\ | back-end |
\ |--------------|
/ |
comm channel -( | <--------------- JDWP - Java Debug Wire Protocol
\ |
|--------------|
| front-end |
|--------------| <------- JDI - Java Debug Interface
| UI |
|--------------|