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防止加載代理多次。
這是事實嗎?爲什麼?
希望能有一些代碼來證明它!
謝謝!