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

首先,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上是没有的。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值