Я использую jdk 1.6. Я привязал агента к целевому jvm и отправил несколько аргументов. Можно ли повторно использовать агент, запущенный в целевом jvm, поскольку мои несколько аргументов изменились? Я хочу, чтобы программа выполняла новое задание, используя новое значение этих аргументов. Есть ли у кого-то подобный опыт? thanksкак повторно использовать агент, который уже загружен в целевой jvm во время выполнения
ответ
Конечно, вы можете повторно использовать реализацию агента. Агент Java, представленный некоторым способом
public static void premain(String agentArgs, Instrumentation inst);
рассматривается как любой класс Java. Единственное, что этот агент вызывается перед основной точкой входа в приложение normal Java. Кроме того, агент предлагает возможность легко добавить Instrumentation
. Вы можете реорганизовать агента, чтобы он попал в его собственный пакет, и добавьте агента в какую-либо программу, просто добавив пакет агента в путь к классу программы. Агент в основном представляет собой обычную Java-программу, которая вызывается перед программой Java, которая была объявлена в файле манифеста или как явная точка ввода программы в командной строке.
Просто имейте в виду, что любые классы, которые необходимо загрузить для загрузки агента, больше не могут быть перехвачены.
Мне нужно сделать это во время выполнения. –
Агент Java вызывается во время выполнения. Однако он должен быть зарегистрирован при запуске программы. –
'premain' разрешает только до того, как была загружена целевая программа. –
Что вы подразумеваете под «повторным использованием агента»? Если вы хотите изменить поведение работающего агента, ваш агент должен предложить для этого интерфейс, например. принимать команды через сокет или трубу. – Holger
Да. повторно использовать агента. –
Ну, труба должна быть способ сделать это. –