Получение переменных в реальном времени из памяти среды выполнения Java (виртуальной машины)? - PullRequest
0 голосов
/ 28 февраля 2010

Скажем, у меня в системе работает несколько сред времени исполнения java, которые используются несколькими приложениями. Я хотел бы программно взаимодействовать с этими приложениями, читая их память.

Типичным подходом является непосредственный просмотр памяти этого приложения, однако для java-приложений это кажется практически невозможным из-за среды выполнения java. Вместо этого нужно заглянуть в память среды выполнения Java или отладить ее.

[выше я думаю, что вышеизложенное я узнал из нескольких поисков в Интернете, если что-то не так, поправьте меня]

Примечание: имейте в виду, что приложение, которое я хочу отслеживать, не принадлежит мне, и поэтому у меня нет ни исходного кода, ни возможности запустить приложение в «режиме отладки» или что-то в этом роде.

Теперь, поскольку это непроизводственный проект, я бы предпочел простой выход: использование существующего приложения с графическим интерфейсом Windows, которое уже может отслеживать переменные среды выполнения Java, и его приложения программно сканируют их из этого приложения с графическим интерфейсом для использование в моем собственном проекте. Если такая программа существует, я буду очень признателен за помощь.

Если вышеупомянутое невозможно, как я (программно) могу получить эти переменные в противном случае?

1 Ответ

2 голосов
/ 28 февраля 2010

Трудно ответить на этот вопрос точно, не зная намного больше о вовлеченном приложении, его структуре и т. Д. Обратите внимание, что объекты перемещаются в памяти JVM, и поэтому вы не можете непосредственно контролировать реальную память приложения.

Итак, первый вопрос: откуда вы знаете, что вы хотите отслеживать без исходного кода? например какие переменные / объекты и т. д.? 1005 *

Учитывая, что вы с этим справились, мне кажется, что у вас есть два варианта.

  1. декомпилировать и обрабатывать приложение (возможно, статически, возможно, используя AOP) и перекомпилировать его. Это предполагает, что приложение не запутано, и вы не нарушаете условия лицензирования и т. Д.
  2. оборачивает приложение в тонкий слой, который использует отражение, чтобы идентифицировать интересующие вас переменные, и отслеживает значения этих переменных по мере выполнения процесса. Я подозреваю, что вам все равно придется декомпилировать для определения этих переменных.

Вы можете контролировать эти значения удаленно, создав MBean и предоставив доступ через JMX , и осуществив мониторинг через JConsole . Это довольно тривиально по сравнению с начальным этапом поиска интересующих вас переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...