JVM中Instrumentation实现
想必不少人听说过javaagent,但是很少人听说Instrumentation,其实Instrumentation就是javaagent的实现机制,说到Instrumentation,就必须想了解java的attach机制,那就先说下attach的实现。 大家进行jstack的时候,是不是经常看到两个线程 Signal Dispatcher 和 Attach Listener 线程,可能不知道是干嘛的吧,这两个线程是实现attach的关键所在,其中 前者是在jvm启动的时候就会创建的 , 后者只有接收过attach请求的时候vm才会创建 ,顾名思义, Signal Dispatcher是分发信号的 , Attach Listener 是处理attach请求的 ,那么两者有什么关系呢,当我们 执行attach方法的时候,会向目标vm发出一个SIGQUIT 的信号,目标vm收到这个信号之后就会创建Attach Listener线程了 ,当然jvm保证了不会多创建。 Attach机制说得简单点就是提供A进程可以连上B进程(当然是java进程),创建socket进行通信,A通过发命令给B,B然后对命令进行截取从自己的vm中获取信息发回给客户端vm,但是并不是随便发指令都会处理的,那么attach Listener接收哪些命令呢,如下所示: static