Java Agent的初步认识和开发

4 篇文章 0 订阅
2 篇文章 0 订阅

认识

Java Agent即Java探针技术, 通过Java Interface的方式对JVMTI(JVM Tool Interface) 底层一些功能的调用进而实现一些自己想要的应用功能, 比如应用程序性能分析, 应用调用监控拦截等功能

JVMTI介绍

JVMTI是JVM向外暴露的一批接口, 提供了诸如获取JVM中线程, 内存, 堆栈, 方法, 定时器等功能, 通过这些接口我们可以完全的把控应用的运行时信息, 运行时的拦截跟踪等; 同时它也是JPDA架构中处于最地下的一层服务接口,在其之上才构建出Java应用的Debug架构体系;

instrument包介绍

jdk的java.lang.instrument包下面定义了JVM中Class的存在形式及修改转化Class定义文件的接口. 这些接口由JVM开发商(sun)实现. 我们就可以使用这些接口进而对Class进行修改;

运行原理

定义Java Agent的jar

一个Java Agent就是一个普通的jar文件, 然后在jar的MANIFEST.MF文件中声明jar的执行入口class路径, 比如

Premain-Class: x.y.z.MainClass

Agent jar的入口class

一个普通的Java-class, 然后需要有一个限定名称和入参的静态方法

public static void premain(String agentArgs, Instrumentation instrumentation) throws PluginException, IOException {
// 自定义切入逻辑代码
}

java命令指定Agent参数

java -javaagent:{agent-jar-path} -D{agent.param.key}={agent.param.value} -jar {app-jar-path}

启动步骤

JVM启动时, 在加载应用jar之前, 在加在Instrumentation的实现类时, 就会调用到我们自己写的Agent的Main方法中去, 去执行我们自己的逻辑;

实践开发

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值