Загрузить агент Java во время выполнения на OpenJDK?
Я нашел много ответов, указывающих на меня VirtualMachine#loadAgent
, что, честно говоря, было бы здорово, за исключением того, что у меня нигде нет класса VirtualMachine. Я был довольно смущен этим, но у меня, похоже, нет API-интерфейса Attach. Я использую OpenJDK 8:
$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b05)
OpenJDK 64-Bit Server VM (build 25.222-b05, mixed mode)
Какие есть еще способы загрузить Java-агент? Окружающая среда, в которой я работаю, имела бы очень небольшой успех при прохождении -javaagent:
аргументы, так как он предназначен для внедрения в classpath во время выполнения, и, очевидно, любой обычный пользователь не захочет / не будет иметь знания, чтобы вручную изменять аргументы JVM только для моей конкретной программы.
С другой стороны, просто чтобы убедиться, что этот класс является частью OpenJDK, так как он не предназначен только для виртуальной машины Java, я загрузил код OpenJDK с http://hg.openjdk.java.net/ и нашел файл VirtualMachine.java, что означает, что он определенно должен существовать
1 ответ
Я нашел много ответов, указывающих на меня
VirtualMachine::loadAgent
, что честно было бы здорово, если не считатьVirtualMachine
класс, где угодно.
Давайте начнем этот Javadocs для VirtualMachine
а также VirtualMachineDescriptor
Очевидно, что VirtualMachine
класс определяется библиотеками классов Java, поэтому класс существует. Поэтому вопрос в том, почему вы не можете найти сам класс во время компиляции и / или во время выполнения.
Для более старых JVM до Java 6, VirtualMachine
класс был полувнутренным, и вам нужно было получить к нему доступ из tools.jar
файл:
- Как импортировать и использовать com.sun.jdi.VirtualMachine
- Доступ к классам VirtualMachine и HotspotVirtualMachine из JDK1.5
Когда VirtualMachine
класс стал официальным API в Java 6, его имя изменилось на com.sun.tools.attach.VirtualMachine
, Тем не менее, это было еще в tools.jar
файл, а не основной rt.jar
файл. Это продолжалось до (и в том числе) Java 8.
В Java9 была представлена система модулей, и все изменилось. ни rt.jar
или же tools.jar
существовать больше Чтобы получить доступ к этим классам сейчас (начиная с Java9), вам нужно включить requires java.attach
в вашей module.info
файл.