1. Java Agent是什么

Java Agent是JDK 1.5引入的技术,其通常表现形式是一个Jar文件,它的核心作用就是进行bytecode instrumentation。

那么,bytecode instrumentation是什么意思呢?就是对字节码(bytecode)进行修改(instrumentation),让原有的类增加一份额外的功能。

一般来说,Java Agent要配合着字节码类库(例如,ASM、ByteBuddy和Javassist)一起使用:

bytecode instrumentation = Java Agent + Java ASM等字节码类库

形象的来说,将一个运行的JVM想像成一个密闭的房子,房子里有各种各样的物品(正在加载的类、已经加载的类);
Java Agent就是为这个密闭的房子打开了一扇门,允许我们访问那些物品(正在加载的类、已经加载的类);
但是,真正修改物品(正在加载的类、已经加载的类)的操作是由Java ASM等操作字节码的类库来完成的。

那么,Java Agent有哪些具体的应用呢?
Java Agent是Arthas使用的技术,是Skywalking使用的技术,也是Crack Java软件过程要用到的技术。

因此,Java Agent是一项十分有用的技术。

2. 课程的稀缺性

在此之前,市面上并没有针对Java Agent进行系统介绍的课程。
通过搜索引擎查找,会发现与Java Agent相关的内容大多是个人知识总结分享的内容。
这些内容有如下特点:

  • 内容质量不一
  • 详略程度不一
  • 学习难度千差万别

总体上来说,学习者很难有一个整体认知、系统学习的过程。

3. 课程目标

在构思课程内容时,带有以下目标:

  • 课程学习梯度:从简单到复杂,让学习者有一个循序渐进的理解过程。
  • 构造完整、统一的知识体系:不是零散的知识点堆砌,而是有一个统一的贯穿始终的知识框架。
  • 具有可操作性的代码示例,不只是讲概念,更注意于实践。

javaagentinactiontengxun.png

4. 课程知识体系

《Java Agent基础篇》课程,现已经在51CTO发布,课程地址:https://edu.51cto.com/course/30137.html

本课程通过四章内容对Java Agent相关知识进行讲解:

  • 第一章,介绍Agent Jar的三个组成部分:Manifest、Agent Class和ClassFileTransformer。
  • 第二章,介绍Agent Jar的两种启动方式:从命令行启动和使用Attach机制启动。
  • 第三章,介绍如何利用Instrumentation API来实现Agent Jar的功能。
  • 第四章,Java Agent的应用与技巧。

javaagentmindmap.png

5. 讲师介绍

我叫刘森,南京师范大学研究生毕业,2015年获得信息系统项目管理师(高级),2014年获得系统集成项目管理工程师(中级)。

目前,我的课程都是围绕着“Java字节码”技术展开:

  • 《Java Agent基础篇》是在一个运行JVM当中提供修改字节码的机会
  • 《Java ASM系列》(免费课程)是一个操作字节码的类库
  • 《Java 8 ClassFile》专注于字节码的理论知识,入选为“51CTO数字化人才证书项目认证课程”

因此,大家想学习字节码的技术可以找我:字节码技术找刘森,轻松学习又省心~~~

6. 附赠资料

Java ASM课程的视频,我已经上传到网盘,有兴趣的同学可以自行下载:

JavaASM系列(百度网盘)

链接:https://pan.baidu.com/s/1P9_ja4VXYXw99cadRV97eg 
提取码:fsnf

JavaASM系列(阿里云盘)

链接:https://www.aliyundrive.com/s/HKGRaTSFV3N
提取码: dt64

另外,我用Java Agent写了一个mini-jn项目,有兴趣的同学可以看一下:

https://gitee.com/lsieun/mini-jn

7. 结语

《Java Agent基础篇》是2022年刚出的课程,是一份“热乎乎”的课程,你是否打算向“技术大牛”的方向迈出一步呢?

  • 第一,课程自身的价值。Java Agent能够让我们与JVM加载的类进行“亲密接触”,它有着不同的应用方向,可以进行性能诊断,可以进行链路跟踪,可以进行安全防御,甚至可以Crack软件。
  • 第二,潜在的竞争优势。学会了Java Agent的知识之后,与不会Java Agent的小伙伴比起来,也就更具一份竞争优势!
  • 第三,担心学不会?如果你担心学不会,大可放心;如果学习过程中,遇到什么问题,可以随时联系我;只要我看到消息,就会尽早回复滴。如果不会ASM怎么办,没有关系,ASM和Java Agent的问题,我可以一起解答。

学习Java Agent,是一份增值性的知识,何不趁着闲暇的时光为自己充充电,让自己的知识技能增加一个魂环!

最后,感谢大家花费时间阅读这篇文章!