Java Agent初认识

2020-07-12  本文已影响0人  醒了_2440

1.前言

我们可能听过java的探针技术,用作在jvm加载class前后动态修改字节码或者在监听jvm运行状态等。其实都是基于实现jvm对外暴露的工具接口 Java Instrumentation API 做到的。下边我们就来学习下怎么创建一个java agent并且在jvm启动前后修改我们的类行为。

2.什么是Java Agent

一般来说,java agent只是一个特制的jar,能够利用JVM提供的Instrumentation API来更改JVM中加载的现有字节码。要想创建一个java agent,必须定义两种方法,如下所示:

3.加载Java Agent的方式

有两种方式去加载一个定义好的java agent,静态加载和动态加载:

(1) 静态加载 使用premain通过-javaagent选项加载代理
java -javaagent:agent.jar -jar application.jar
注意:-javaagent参数要在-jar参数前面
(2)动态加载 使用agentmain通过Java Attach API将代理加载到运行中的JVM中
VirtualMachine jvm = VirtualMachine.attach(jvmPid);
jvm.loadAgent(agentJarPath);
jvm.detach();

4.最常用的Java Instrumentation API

5.MANIFEST.MF文件

如果需要java启动后识别agent,需要在MANIFEST.MF文件中定义Agent-Class(动态加载)或者Premain-Class(静态加载)

上一篇 下一篇

猜你喜欢

热点阅读