目录

asm和agent关系

目录

一个类(Class)会加载到JVM当中运行;在以前的时候,我们可能以为加载到JVM当中的Class不能再进行修改了;但是,通过Java Agent技术,我们可以对已经加载的类进行修改,改变类的原有功能。这样的技术,就应用在Arthas当中,应用在Skywalking当中,也可以应用在软件的破解当中。

简单来说,就是ASM是修改字节码的工具,而Agent可以在正在运行的JVM上“打开一扇大门”,通过这扇“大门”,ASM“冲进”JVM内部修改字节码。

修改完成后是否持久化了 以后这个class都是新的了 还是重启项目后又还原了[脸红]

没有进行持久化。如果进行重新启动,添加了Agent, 它会再次修改这个类;如果进行重新启动,没有加载Agent,那么加载的就是最开始的、没有经过修改的类。

举个例子,我家里电表箱(JVM)坏了,电表箱的位置大概在房顶的位置。这个时候,我要找一个梯子(Agent),也要找到修电表的工具箱(ASM),两者结合在一起才能完成修电表箱。没有梯子(Agent),我摸不到电表箱;没有工具箱(ASM),我只能看看电表箱的状况,没有办法修理。换句话说,ASM可以单独使用的,Agent也可以单独使用的。