美文网首页
Java Agent初认识

Java Agent初认识

作者: 醒了_2440 | 来源:发表于2020-07-12 23:36 被阅读0次

1.前言

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

2.什么是Java Agent

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

  • premain 将在JVM启动时使用-javaagent参数静态加载代理
  • agentmain 使用Java Attach API将代理动态加载到JVM中,但是注意JVM的实现(例如Oracle,OpenJDK等)可以提供一种动态启动代理的机制,但这不是必需的。

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

  • addTransformer – adds a transformer to the instrumentation engine
  • getAllLoadedClasses – returns an array of all classes currently loaded by the JVM
  • retransformClasses – facilitates the instrumentation of already loaded classes by -adding byte-code
  • removeTransformer – unregisters the supplied transformer
  • redefineClasses – redefine the supplied set of classes using the supplied class files, meaning that the class will be fully replaced, not modified as with
    retransformClasses

5.MANIFEST.MF文件

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

相关文章

  • Java Agent初认识

    1.前言 我们可能听过java的探针技术,用作在jvm加载class前后动态修改字节码或者在监听jvm运行状态等。...

  • IDEA + maven 零基础构建 java agent 项目

    200316-IDEA + maven 零基础构建 java agent 项目 Java Agent(java 探...

  • RASP研发踩坑之 热加载与热卸载

    在RASP研发踩坑之agent 加载机制中,当想要卸载 Java agent 时,原生Java Agent 不能够...

  • 破解 Java Agent 探针黑科技!

    一、什么是 Java Agent ? 笼统地来讲,Java Agent 是一个统称,该功能是 Java 虚拟机提供...

  • Java探针(javaagent)

    JDK1.5开始引入了Agent机制(即启动java程序时添加“-javaagent”参数,Java Agent机...

  • Btrace

    在之前介绍Java Agent的这篇文章中,简单介绍了Java agent的应用,里面提到了基于Java agen...

  • JAVA进阶之Agent

    1、什么是 Java Agent 笼统地来讲,Java Agent 是一个统称,该功能是 Java 虚拟机提供的一...

  • Java Agent (JVM Instrumentation

    Java Agent 简介 Java 代理 (agent) 是在你的main方法前的一个拦截器 (intercep...

  • Java agent初识

    Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent 一、什么是...

  • java agent开发

    java agent介绍 java agent是jvm插件或者叫做代理,她是运行在main方法之前,她内定的方法名...

网友评论

      本文标题:Java Agent初认识

      本文链接:https://www.haomeiwen.com/subject/vbnncktx.html