本篇文章主要介绍了" Java千百问_08JDK详解(013)_JVMTI是什么",主要涉及到方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
点击进入_更多_Java千百问1、JVMTI是什么JVMTI(JVM Tool Interface)是JPDA体系中的最底层, 由Java虚拟机提供的nativ...
点击进入_更多_Java千百问
1、JVMTI是什么
JVMTI(JVM Tool Interface)是JPDA体系中的最底层, 由Java虚拟机提供的native编程接口,是JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface)的更新版本。
了解JPDA体系看这里:JPDA是什么
从它的发展中我们就可以知道,JVMTI提供了调试(debug)和分析(profiler)功能;同时,它还有监听(Monitoring),线程分析(Thread analysis)以及覆盖率分析(Coverage Analysis)等功能。正是由于JVMTI的强大功能,它是实现Java调试器,以及其它Java运行态测试与分析工具的基础。目前已有很多成熟的集成工具提供了JVMTI的实现(例如Sun、IBM以及一些开源项目如Apache Harmony DRLVM),这些工具虽然强大易用,但是在一些特定情况下,开发者常常会有一些特殊的需求,这个时候就需要定制工具来达成目标。
JVMTI是一套本地代码接口,因此我们需要使用C/C++以及JNI。开发时一般采用建立一个Agent(通过C++编写)的方式来使用JVMTI,它可以使用JVMTI函数、设置回调函数、从JVM中得到当前的运行态信息,还可以操作虚拟机的运行态。
2、如何加载JVMTI agent
当我们把Agent编译成一个动态链接库之后,我们可以通过两种方式加载Agent:启动加载模式、活动加载模式。具体如下:
启动加载模式
在Java程序启动时加载它,其实是在java启动时指定加载agent,如下:
-agentlib:<agent-lib-name>=<options>
注意,这里的路径是环境变量的相对路径,例如 java -agentlib:libagent=opt,java启动时会PATH环境变量定义的路径处装载libagent.so
-agentpath:<path-to-agent>=<options>
这里是绝对路径,例如 java -agentpath:/home/admin/agentlib/libagent.so=opt
活动加载模式