1
我发现了Java API连接可以加载javaagent如下面的代码:的Java VirtualMachine.loadAgent只装剂在一次
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.VirtualMachineDescriptor;
import java.util.List;
public class ListVM{
public static void main(String[] args){
List<VirtualMachineDescriptor> vmList = VirtualMachine.list();
for(VirtualMachineDescriptor vm : vmList){
System.out.println("name: " + vm.displayName() + " id :" + vm.id());
try{
VirtualMachine vm0 = VirtualMachine.attach(vm.id());
// load agent, agnet class's agentmain will be invoked.
vm0.loadAgent("/root/tmp/ChinaAgent.jar");
System.out.println("Load agent done.");
vm0.detach();
}catch(Exception e) {
System.out.println("exception : " + e.getMessage());
}
}
}
}
声明:vm0.loadAgent("/root/tmp/ChinaAgent.jar");
它加载代理jar文件。
但客户端的代码将只运行一次,
所以我猜这个代理JAR加载只有一次,这意味着在JVM防止加载代理多次。
这是事实吗?为什么?
希望能有一些代码来证明它!
谢谢!