赞
踩
Java Agent即Java探针技术, 通过Java Interface的方式对JVMTI(JVM Tool Interface) 底层一些功能的调用进而实现一些自己想要的应用功能, 比如应用程序性能分析, 应用调用监控拦截等功能
JVMTI是JVM向外暴露的一批接口, 提供了诸如获取JVM中线程, 内存, 堆栈, 方法, 定时器等功能, 通过这些接口我们可以完全的把控应用的运行时信息, 运行时的拦截跟踪等; 同时它也是JPDA架构中处于最地下的一层服务接口,在其之上才构建出Java应用的Debug架构体系;
jdk的java.lang.instrument包下面定义了JVM中Class的存在形式及修改转化Class定义文件的接口. 这些接口由JVM开发商(sun)实现. 我们就可以使用这些接口进而对Class进行修改;
一个Java Agent就是一个普通的jar文件, 然后在jar的MANIFEST.MF文件中声明jar的执行入口class路径, 比如
Premain-Class: x.y.z.MainClass
一个普通的Java-class, 然后需要有一个限定名称和入参的静态方法
public static void premain(String agentArgs, Instrumentation instrumentation) throws PluginException, IOException {
// 自定义切入逻辑代码
}
java -javaagent:{agent-jar-path} -D{agent.param.key}={agent.param.value} -jar {app-jar-path}
JVM启动时, 在加载应用jar之前, 在加在Instrumentation的实现类时, 就会调用到我们自己写的Agent的Main方法中去, 去执行我们自己的逻辑;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。