Java Language Aggiunta di un agente in fase di runtime


Esempio

Agenti possono essere aggiunti a una JVM in fase di runtime. Per caricare un agente è necessario utilizzare VirtualMachine.attatch (ID stringa) di Attach API. È quindi possibile caricare un jar compilato con il seguente metodo:

public static void loadAgent(String agentPath) {
    String vmName = ManagementFactory.getRuntimeMXBean().getName();
    int index = vmName.indexOf('@');
    String pid = vmName.substring(0, index);
    try {
        File agentFile = new File(agentPath);
        VirtualMachine vm = VirtualMachine.attach(pid);
        vm.loadAgent(agentFile.getAbsolutePath(), "");
        VirtualMachine.attach(vm.id());
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

Questo non chiamerà premain ((String agentArgs, Instrumentation inst) nell'agente caricato, ma invece chiamerà agentmain (String agentArgs, Instrumentation inst) . Ciò richiede che Agent-Class sia impostata nell'agente Manifest.mf.