首页 > 编程语言 > 详细

JTI + JNI,为Java程序提供获取JVM内部信息的通道

时间:2015-03-28 23:17:18      阅读:992      评论:0      收藏:0      [点我收藏+]

首先,JTI是啥?

HotSpot JVM是使用C++写的,在操作系统层面来看,java.exe进程与其他进程并无特别之处。任何一个进程都可以加载第三方的DLL,JTI就是java.exe开放出来的向Java.exe进程注入dll的接口。也就是说,开发者根据JTI定义好的规范,用C++写一个dll,这个dll就可以被java.exe进程加载了【启动jvm的时候要加上-agentlib参数】。

JTI的详细资料参见以下网址:http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html。

JNI不用多说了。

这里有意思的是,如果前面写的JTI dll通过JNI,为java程序提供了直接的调用接口,那就打通了从Java语言到JTI功能的整个调用通道,如下:

首先,Java通过JNI,调用JTI dll中的方法。

然后,我们自己写的JTI dll,通过JTI接口访问JVM的内部结构,并获取JVM内部信息,并返回。

最后,Java程序获得JVM内部信息。

那么JTI可以提供什么内部信息呢?简单的说,Java调试程序能获取的任何信息,JTI都能获得,这是因为Java调试器都是基于JTI写的。

举两个例子,以下是JTI开放出来的两个调用函数:

GetObjectSize:获取指定对象占据内存的大小。

FollowReferences:获取从指定对象能够访问的所有对象。

也就是说,通过以上调用过程,应用层的Java代码就可以获取以上功能了,这在普通的JDK上是没有的。

最后,实现了这一点不知道有没有用处,但一定很有意思。。。

JTI + JNI,为Java程序提供获取JVM内部信息的通道

原文:http://blog.csdn.net/jiangfuqiang/article/details/44707239

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!