JAVA代码热部署,在线不停服动态更新
作者:网络转载 发布时间:[ 2015/6/5 13:42:45 ] 推荐标签:软件开发 Java
Java Code Instrumentation如何获取?
public class JavaDynAgent {
private static Instrumentation instrumentation;
private static Object lockObject = new Object();
public JavaDynAgent() {
}
public static void agentmain(String args, Instrumentation inst) {
Object var2 = lockObject;
synchronized(lockObject) {
if(instrumentation == null) {
instrumentation = inst;
System.out.println("0->" + inst);
} else {
System.out.println("1->" + inst);
}
}
}
public static Instrumentation getInstrumentation() {
return instrumentation;
}
}
实现原理是:
1.绑定pid获得虚拟机对象,然后通过虚拟机加载代理jar包,这样调用到agentmain,获取得到Instrumentation
2.基于Instrumentation接口可以实现JDK的代理机制,从而实现对类进行动态重新定义。
注意:com.sun.tools.attach.VirtualMachine的jar包是 jdk下lib中的tools.jar,所以项目中要引用到这个jar包,而且因为涉及到底层虚拟机,windows和linux机器这个jar不同
因此,整个流程是:
1.项目中引用 jdk/lib/tools.jar,否则无法使用VirtualMachine类
2.项目中引用 javaagent.jar ,它提供了agentmain接口
3.代码实现动态增加JDK代理
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等

sales@spasvo.com