JavaAgent实验

agent使用场景:

当类加载时希望对类进行修改或者增强,又不影响类的代码。

具体场景:监控,热部署,运行pojie程序

 

比较agent的使用(参考探秘-Java-热部署三(Java-agent-agentmain)):

premain:

优点:可以在启动的时候,通过参数指定,在类加载前进行操作

缺点:只能在启动的时候指定参数,不够优雅;加载之后修改需要重新创建类加载器。或者在自定义的类加载器种修改

agentmain:

优点:不需要创建类加载器,可以直接修改

缺点:有很多使用限制

 

实验源码:https://gitee.com/jinxin.70/javaagentparent

 

疑惑:

Instrumentation.retransformClasses(Class... classes)方法,需要你指定类的字节码,才能转换。能不能对某个包或者路径下的类进行转换呢?还是要搜一下别的项目怎么使用这个API的。TODO
 

参考:

Java Agent调试

 

其他资料:

一文带你了解Java Agent

Java Agent的隔离实现以及卸载时一些坑

探秘-Java--热部署二(Java-agent-premain)

探秘-Java-热部署三(Java-agent-agentmain)

 

其他:

使用类加载实现类的热部署https://gitee.com/jinxin.70/classloader

你可能感兴趣的:(java)