Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网
字节码被直接插入到一个 Java 类中,从而获得类最初不支持的功能。对于希望修改类而不触及源代码,或者希望在运行时动态修改类定义的开发人员,这个过程可以实现多种用途。我将向您展示如何使用 BCI 来将性能监控插装注入到类中。
不同的 BCI 框架可以以不同的方式达到这个目的。有一个简单的可以在方法级实现插装的技巧:重新命名目标方法,并使用包含跟踪指令并调用初始(重命名的)方法的原始签名插入一个新方法。一个名为 JRat 的开源 BCI 工具演示了一个技巧,该技巧专门为方法执行收集运行时间,因此要比通用的 BCI AOP 工具(参见 参考资料)简短。我将一个 JRat 项目的例子压缩成了清单 15 所示的内容: 清单 15. 使用 BCI 的插装方法示例
Java运行时监控,第2部分: 编译后插装和性能监控(17)时间:2011-02-13 IBM Nicholas Whitehead实现 BCI 的两个常用策略为: 静态:Java 类或者类库被插装,插装的类被保存在原始类或类库的副本中。然后这些副本被部署到一个应用程序,这个应用程序对插装的类和其他的类一视同仁。 动态:在类载入过程中,Java 类在运行时被插装。插装的类仅暂存于内存中;JVM 结束后,它们就会消失。 动态 BCI 的优势之一就在于提供了灵活性。动态 BCI 通常都是依照一组被配置的指令(通常位于一个文件中)执行。虽然它支持热交换,但修改插装只需要升级该文件和 JVM 周期就可以了。尽管动态 BCI 很简单,但我还是要先分析静态插装过程。 静态 BCI 在这个例子中,我将使用静态 BCI 来插装 EmpDAOImpl 类。我将使用 JBoss AOP,一个开源 BCI 框架(参见 参考资料)。 第一步:定义我要用来收集方法调用性能数据的截取程序,因为这个类将会被静态编入 EmpDAOImpl 类的字节码中。在这种情况下,JBoss 接口与我为 Spring 定义的截取程序是相同的,不同的是导入的类名。这个例子使用的截取程序是 org.runtimemonitoring.aop.ITracerInterceptor。第二步:使用与定义 EJB 3 截取程序的 jboss-aop.xml 相同的语法定义 jboss-aop.xml 文件。清单 16 显示了该文件: 清单 16. 静态 BCI jboss-aop.xml 文件
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |