java.lang.instrucment and Attach API的基本概念
来源:互联网 发布:自动化编程用什么语言 编辑:程序博客网 时间:2024/06/10 08:52
之前看很多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
- java.lang.instrucment and Attach API的基本概念
- jMock出错java.lang.IllegalStateException: Native library for Attach API not available in this JRE的解决方
- Java 探针:Java SE 6 提供的 Attach API
- java.lang.String 中 API 的使用
- The Attach API
- 【JAVA新生】nio attach引发的问题
- JTAPI -- Java Telephony API 基本概念
- Instrucment初识
- Java语言包Lang API(java.lang):概览
- 运行jtester测试Caused by: java.lang.UnsatisfiedLinkError: no attach in java.library.path错误解决
- testng测试报错:java.lang.UnsatisfiedLinkError: no attach in java.library.path解决方案
- 深入java Api Lang包
- Java.lang.String API笔记
- Boolean:JAVA-API-Lang包
- java.lang.string常用API
- java.lang.StringBuilder常用API
- Java基础API-lang包
- API学习java.lang.clone
- 每周阅读精选(2013-03-11)
- 用eclipse集成开发环境开发、调试arm linux程序
- 记录一次对代码完全陌生的问题排查过程
- 每周阅读精选(2013-03-18)
- 我读《程序员的职业素养》
- java.lang.instrucment and Attach API的基本概念
- 一个程序员关注的微信公众账号
- 线上too many open files问题排查记录
- 我读《精益创业-新创企业的成长思路》
- 利用weka来进行线性回归
- SPI初步接触和简单例子
- 一次项目后的总结(黑色五月)
- java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决办法
- dnsmasq