思诚科技 seecen LOGO
咨询热线:0791-87557233
  首页 |   Java EE  
关于思诚
关注官方微信

Java SE 6新特性:Instrumentation

来源:网络    更新时间:2014-12-16


简介

  利用Java代码,即java.lang.instrument做动态Instrumentation是JavaSE5的新特性,它把Java的instrument功能从本地代码中解放出来,使之可以用Java代码的方式解决问题。使用Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在JVM上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和Java类操作了,这样的特性实际上提供了一种虚拟机级别支持的AOP实现方式,使得开发者无需对JDK做任何升级和改动,就可以实现某些AOP的功能了。

  在JavaSE6里面,instrumentation包被赋予了更强大的功能:启动后的instrument、本地代码(nativecode)instrument,以及动态改变classpath等等。这些改变,意味着Java具有了更强的动态控制、解释能力,它使得Java语言变得更加灵活多变。

  在JavaSE6里面,最大的改变使运行时的Instrumentation成为可能。在JavaSE5中,Instrument要求在运行前利用命令行参数或者系统参数来设置代理类,在实际的运行之中,虚拟机在初始化之时(在绝大多数的Java类库被载入之前),instrumentation的设置已经启动,并在虚拟机中设置了回调函数,检测特定类的加载情况,并完成实际工作。但是在实际的很多的情况下,我们没有办法在虚拟机启动之时就为其设定代理,这样实际上限制了instrument的应用。而JavaSE6的新特性改变了这种情况,通过JavaToolAPI中的attach方式,我们可以很方便地在运行过程中动态地设置加载代理类,以达到instrumentation的目的。

  另外,对native的Instrumentation也是JavaSE6的一个崭新的功能,这使以前无法完成的功能——对native接口的instrumentation可以在JavaSE6中,通过一个或者一系列的prefix添加而得以完成。

  最后,JavaSE6里的Instrumentation也增加了动态添加classpath的功能。所有这些新的功能,都使得instrument包的功能更加丰富,从而使Java语言本身更加强大。

  Instrumentation的基本功能和用法

  “java.lang.instrument”包的具体实现,依赖于JVMTI。JVMTI(JavaVirtualMachineToolInterface)是一套由Java虚拟机提供的,为JVM相关的工具提供的本地编程接口集合。JVMTI是从JavaSE5开始引入,整合和取代了以前使用的JavaVirtualMachineProfilerInterface(JVMPI)和theJavaVirtualMachineDebugInterface(JVMDI),而在JavaSE6中,JVMPI和JVMDI已经消失了。JVMTI提供了一套”代理”程序机制,可以支持第三方工具程序以代理的方式连接和访问JVM,并利用JVMTI提供的丰富的编程接口,完成很多跟JVM相关的功能。事实上,java.lang.instrument包的实现,也就是基于这种机制的:在Instrumentation的实现当中,存在一个JVMTI的代理程序,通过调用JVMTI当中Java类相关的函数来完成Java类的动态操作。除开Instrumentation功能外,JVMTI还在虚拟机内存管理,线程控制,方法和变量操作等等方面提供了大量有价值的函数。

  Instrumentation的最大作用,就是类定义动态改变和操作。在JavaSE5及其后续版本当中,开发者可以在一个普通Java程序(带有main函数的Java类)运行时,通过–javaagent参数指定一个特定的jar文件(包含Instrumentation代理)来启动Instrumentation的代理程序。

  在JavaSE5当中,开发者可以让Instrumentation代理在main函数运行前执行。简要说来就是如下几个步骤:

  编写premain函数

  编写一个Java类,包含如下两个方法当中的任何一个

publicstaticvoidpremain(StringagentArgs,Instrumentationinst);[1]
publicstaticvoidpremain(StringagentArgs);[2]

  • 上一篇文章:

  • 下一篇文章:
  •  

    0791-87557233

    重视每个来电 珍惜您的时间
    思诚者开发沙龙
    江西思诚科技有限公司  赣ICP备17006097号  CopyRight©2014 - 2018