1、基本概念

Java Agent 是 jdk1.5 引入的特征,此特征为用户提供了在 jvm 将字节码文件读入内存后,jvm 使用对应的字节流在 java 堆中生成 Class 对象之前,用户可以对字节码进行修改的能力,从而 jvm 使用修改后的字节码创建 Class 对象。

目前只支持冷启动,热部署方式仍需官方持续改进。

流程图:

2、应用场景

Pinpoint分布式链路
SkyWalking分布式链路

3、实现步骤
  • 定义一个 resources/META-INF/MANIFEST.MF 文件,在其中添加 premain-class 配置项。
  • 创建 premain-class 配置项指定的类,并在其中实现 premain() 方法,方法签名如下:
public static void premain(String agentArgs, Instrumentation inst){...
}
  • 将 MANIFEST.MF 文件和 premain-class 指定的类一起打包成一个 jar 包。
  • 使用 -javaagent 指定该 jar 包的路径即可执行其中的 premain() 方法。
4、小案例

1)创建一个代理的jar
github: https://github.com/fomeiherz/agent-example
jar打包:mvn clean package
打包完成后,会在 {base}/target 下生成一个agent.jar ,一会启动会用到。

2)创建测试类
本地任意目录创建文件:App.java

public class App {public static void main(String[] args) {new App().test();}private void test() {System.out.println("hello agent.");}
}

把第1步打包的agent.jar拷贝到App.java文件目录下,然后编译启动。

编译:javac App.java
启动:java -javaagent:agent.jar App

【参考资料】
Java探针-Java Agent技术-阿里面试题

Java Agent探针技术相关推荐

  1. Java agent 探针技术(1)-JVM 启动时 premain 进行类加载期增强

    文章目录 1. 简介 2. 使用 Java agent 的步骤 3. 使用示例 3.1 创建实现 ClassFileTransformer 接口的类 3.2 创建使用 ClassFileTransfo ...

  2. Java Agent 探针技术

    Java 中的 Agent 技术可以让我们无侵入性的去进行代理,最常用于程序调试.热部署.性能诊断分析等场景,现如今比较火热的分布式链路追踪项目Skywalking,就是通过探针技术去捕获日志,将数据 ...

  3. 深入Java自动化探针技术的原理和实践

    转至作者 蒋志伟:深入Java自动化探针技术的原理和实践 前言 建议阅读时间 30~40分钟 读者需要对Java JVM 一定了解,文章会系统的介绍Java 探针核心原理和技术实现,总结目前一些主流的 ...

  4. 【Java综合专栏】「引领序幕」全链路追踪原理之Java Agent探针的技术介绍(上篇)

    前提概要 Java调式.热部署.JVM背后的支持者Java Agent: 各个 Java IDE 的调试功能,例如 eclipse.IntelliJ : 热部署功能,例如 JRebel.XRebel. ...

  5. 【JAVA基础☞探针技术】Java探针-Java Agent技术

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 1.原理:基于javaAgent和Java字节码注入技术的java探针工具技术原理 2.原理分析 动态代理功能实现说明,我们利用ja ...

  6. Java探针技术详解

    简介 在JVM中运行中,类是通过classLoader加载.class文件进行生成的.在类加载器加载.class文件生成对应的类对象之前时,我们可以通过修改.class文件内容(就是字节码修改技术), ...

  7. Java Agent与ASM字节码介绍

    Java Agent Java Agent是jdk1.5以后引入的,也叫做Java代理. javaAgent是运行方法之前的拦截器.我们利用javaAgent和ASM字节码技术,在JVM加载class ...

  8. 探针技术-JavaAgent 和字节码增强技术-Byte Buddy

    能够基于Java Agent编写出普通类的代理 理解Byte Buddy的作用 能够基于Byte Buddy编写动态代理 1 Byte Buddy Byte Buddy 是一个代码生成和操作库,用于在 ...

  9. 一文带你了解Java Agent

    转载自  一文带你了解Java Agent Java Agent这个技术,对于大多数同学来说都比较陌生,像个黑盒子.但是多多少少又接触过,实际上,我们平时用的很多工具,都是基于Java Agent实现 ...

最新文章

  1. 遗传算法中的选择操作
  2. 花33元租号玩2小时王者荣耀,未成年为绕过防沉迷用上黑科技上号器App
  3. 如何网络推广浅析网站优化的过程中首页降权了该怎么办?
  4. linux基础(一)
  5. 浮动元素的均匀分布和两端对齐
  6. vs2015软件系统开源_特别版:2015年开源新闻
  7. maven中scope属性
  8. 运行github上的Vue项目
  9. Linux的iovec、readv和writev
  10. unknown host www.baidu.com 解决方法
  11. Nginx正向代理原理和部署方案
  12. 利用tensorflow实现手写体识别
  13. 马拉车算法详解, C++代码实现
  14. python算大写字母
  15. C# 基础学习第四天
  16. 【算法】网球循环赛比赛日程表
  17. 学习单片机我们到底在学习什么?
  18. 诺威健康IPO招股书失效:称将继续录得巨额亏损,TPG持股74.6%
  19. ad7606中文资料_16位ADC数据采集模块AD7606(原理图、中文数据手册、例程等)
  20. EMR 上的 Spark 或 Hive 作业失败并出现 HTTP 503 “Slow Down” AmazonS3Exception

热门文章

  1. ROC将于10月8日上线PancakeSwap
  2. pandas入门: 时间字符串转换为年月日
  3. 2016年04月12日
  4. js - 01 了解浏览器内核,使用谷歌控制台
  5. 三维点云数据使用Excel表格成散点图看趋势
  6. mysql 存储uuid_MySQL中存储UUID的最佳实践
  7. 盘点国内热门AI大模型
  8. Tomcat介绍及安装JDK1.8
  9. Tomcat详细介绍和使用总结
  10. 用最复杂的方式学会数组(Python实现动态数组)