java.lang.instrucment and Attach API的基本概念

本文介绍了Java动态监控技术,重点讲解了JDK5引入的java.lang.instrument包和JDK6新增的Attach API。通过这两种技术,可以实现在JVM层面进行类加载监控及动态代理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    ​    ​之前看很多java动态监控工具基于Instrucment来实现和Attach API,了解一下概念。

 

    ​    ​JDK5中增加了一个包java.lang.instrucment,能够对JVM底层组件进行访问。在JDK 5 中,Instrument 要求在运行前利用命令行参数或者系统参数来设置代理类,在实际的运行之中,虚拟机在初始化之时(在绝大多数的 Java 类库被载入之前),instrumentation 的设置已经启动,并在虚拟机中设置了回调函数,检测特定类的加载情况,并完成实际工作。

    ​    ​

    ​    ​在Java5中,开发基于Instrucment的应用,需要以下几个步骤:

    ​    ​1、编写premain函数

    ​    ​2、jar文件打包

    ​    ​3、运行agent

    ​    ​核心代码如下:

    ​    ​

    ​   

 ​       但是在实际的很多的情况下,我们没有办法在虚拟机启动之时就为其设定代理,这样实际上限制了 instrument 的应用。而 Java SE 6 的新特性改变了这种情况,通过 Java Tool API 中的 attach 方式,我们可以很方便地在运行过程中动态地设置加载代理类,以达到 instrumentation 的目的。 

 

    ​    ​在JDK6中,针对这点做了改进,开发者可以在main开始执行以后,再开启自己的Instrucment程序。

 

    ​    ​在 Java SE 6 文档当中,开发者也许无法在 java.lang.instrument 包相关的文档部分看到明确的介绍,更加无法看到具体的应用 agnetmain 的例子。不过,在 Java SE 6 的新特性里面,有一个不太起眼的地方,揭示了 agentmain 的用法。这就是 Java SE 6 当中提供的 Attach API。

 

    ​    ​Attach API 不是 Java 的标准 API,而是 Sun 公司提供的一套扩展 API,用来向目标 JVM ”附着”(Attach)代理工具程序的。有了它,开发者可以方便的监控一个 JVM,运行一个外加的代理程序。

 

    ​    ​Sun JVM Attach API功能上非常简单,仅提供了如下几个功能:

    ​       ​ ​1、列出当前所有的JVM实例描述

    ​     ​   ​2、Attach到其中一个JVM上,建立通信管道

    ​        ​​3、让目标JVM加载Agent

 

    ​    ​主要的类是VirtualMachine

    ​    ​

参考文章:

http://rednaxelafx.iteye.com/

http://docs.oracle.com/javase/6/docs/jdk/api/attach/spec/index.html 

http://www.ibm.com/developerworks/cn/java/j-lo-jse61/index.html

http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值