Ответ 1
Вы можете использовать Attach API для присоединения к виртуальной машине. Здесь статья, в которой объясняется, как ее использовать
Вот пример кода:
String agentJAR = "myAgent.jar";
VirtualMachine vm = VirtualMachine.attach (processid);
vm.loadAgent(agentJAR);
Где агент - это имя вашей банки.
В банке агента содержится Agent, который может взаимодействовать с JVM с помощью API-интерфейса Instrumentation.
Чтобы создать агент, который загружается во время выполнения, вы реализуете функцию agentmain
следующим образом:
public static void agentmain(String agentArgs, Instrumentation inst);
или
public static void agentmain(String agentArgs);
Объект Instrumentation используется для изменения классов во время выполнения, что вам, вероятно, и не нужно. Но, надеюсь, вы можете просто поставить любой код, который вам нужен для запуска в agentmain, а затем использовать API-интерфейс attach для запуска его в целевой JVM.
Удачи!