博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Instrument
阅读量:2431 次
发布时间:2019-05-10

本文共 2118 字,大约阅读时间需要 7 分钟。

经常看到OpenJPA、Jacoco、cobertura等工具对Java Class进行Instrument操作, Java 从1.5开始也提供了instrument包,那么到底什么是instrument,为什么instrument,怎么instrument呢?

什么是instrument

平时我们写Java程序,都是编写**.java 文件,通过Javac编译成Java Class文件,Java Class文件直接被JVM load到内存中运行。我们是不会去修改Class文件的内容。如果我们发现有要修改的内容,我们要修改java文件然后重新编译生成新的class文件,而Instrument就是对Java Class文件进行修改。

为什么instrument

这个就很简单了,比较常见的应用就是提取通用功能,可以说成是一种AOP,我一般通用功能分两种:
1. 实现一些common的功能(性能监控,安全),要进产品的(比如OpenJPA的Class enhancement)
2. 某些特殊环境才需要的功能,不用进产品的(比如cobertura用来检测覆盖率加的统计测试代码)。

怎么instrument

1. 使用asm/BCEL/javassist在JVM load class之前修改class文件,具体每种的实现可以参考reference里面各个的user guide,在Java1.5之前,大部分对class文件的修改都是直接使用这些三方包,比如AspectJ,比如cobertura
2. 使用Java 1.5引进的新package instrument,Java Instrument 包含2个子包,最主要的是Java Instrumetation,可以用来在class被load之间执行preMain或者AgentMain,如果简单Class功能添加,可以只用到Java Instrumentation,如果需要复杂功能,可能需要结合ClassFileTransformer包以及1里面提到的第三方包对Class文件做详细修改。

Reference:

1. asm: http://asm.ow2.org/ BCEL: http://commons.apache.org/proper/commons-bcel/index.html javasist: http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/

2. cobertura Instrument implementation: 

https://github.com/cobertura/cobertura/blob/master/cobertura/src/main/java/net/sourceforge/cobertura/instrument/InstrumentMain.java

https://github.com/cobertura/cobertura/blob/master/cobertura/src/main/java/net/sourceforge/cobertura/dsl/Cobertura.java

https://github.com/cobertura/cobertura/blob/master/cobertura/src/main/java/net/sourceforge/cobertura/instrument/CodeInstrumentationTask.java

https://github.com/cobertura/cobertura/blob/master/cobertura/src/main/java/net/sourceforge/cobertura/instrument/CoberturaInstrumenter.java instrumentClass(InputStreaminputStream)

3. Java instrument: http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/package-summary.html
4. Java 5 特性 Instrumentation 实践: http://www.ibm.com/developerworks/cn/java/j-lo-instrumentation/
5. JavaAgent加载机制分析: http://alipaymiddleware.com/jvm/javaagent%E5%8A%A0%E8%BD%BD%E6%9C%BA%E5%88%B6%E5%88%86%E6%9E%90/
6. Implementing Aspect Oriented Programming Framework - Java Instrumentation: http://www.geekyarticles.com/2011/09/implementing-aspect-oriented.html

转载地址:http://kftmb.baihongyu.com/

你可能感兴趣的文章
sqlserver中的一些技巧(转)
查看>>
简化Windows 2003域控制器密码(转)
查看>>
GSM无线网络的虚拟分层(转)
查看>>
不用重装 轻松解决Windows系统棘手问题(转)
查看>>
对移动通信网络优化工作的一些见解(转)
查看>>
正确网络配置建议 减少卡机死机的关键(转)
查看>>
智能手机Smartphone开发从零起步(五)(转)
查看>>
防止木马,教你找回被盗的QQ号码(转)
查看>>
SEO技巧中你可能没有注意的细节(转)
查看>>
J2ME结构与相关规范介绍(转)
查看>>
旧版数据库转换至ACCESS2000的注意事项(转)
查看>>
关于移动通信系统中蜂窝的几个概念(转)
查看>>
PL/SQL基本语法要素(转)
查看>>
J2ME基础入门教程(转)
查看>>
MySQL将为数据库管理员减负(转)
查看>>
搜索引擎从入门到精通之二 基本方法篇(转)
查看>>
双频段GSM/DCS移动电话射频指标分析(转)
查看>>
ASP写的汉字转换为UTF-8的一段代码(转)
查看>>
关于CDMA的八个话题(转)
查看>>
让英特尔平台为网吧创造更多价值(转)
查看>>