Можно ли прочитать память запущенного Java-приложения? - PullRequest
15 голосов
/ 29 июня 2010

Я хотел бы узнать, как, или, если вообще возможно, программно взаимодействовать с Java-приложением черного ящика (читая его данные).Были ли какие-либо предыдущие исследования / работы по выполнению подобных вещей?

Я бы предположил, что работа на JVM значительно усложняет ситуацию.

@ anon: Это важно для любой JVM.Вам нужно знать или контролировать особенности того, как JVM выделяет память для извлечения данных из Java-приложения?

Ответы [ 5 ]

3 голосов
/ 29 июня 2010

Вы можете посмотреть в java.lang.instrument . Если вы понимаете структуру классов приложения, это позволит вам изменять методы в уже работающей JVM, и вы сможете придумать способ, который позволит вам извлекать или вставлять данные, достаточные для обмена данными (зависит от методов доступно, конечно).

1 голос
/ 29 июня 2010

Это легко сделать, например, с помощью StackTrace . Он может присоединяться к процессу Java и позволяет проверять и изменять практически все с помощью BeanShell.

1 голос
/ 29 июня 2010

Группа Sable в Университете Макгилла внесла большой вклад в мир Java.

Большая часть работы устарела, но вы можете найти некоторую помощь в их EVolve проект, целью которого является визуализация объектно-ориентированных программ.Некоторые из их проектов, кажется, активно поддерживаются (например, Soot , их среда оптимизации Java), поэтому вам может повезти, связавшись с ними напрямую

0 голосов
/ 29 июня 2010

HotSpot JVM позволяет вам подключить agentlib из профилировщика (см. Open Source Java Profilers или рекламных роликов, таких как Your Kit ), затем в профилировщике вы можете проверить память / процессор / темы и т. д. Если вам нужны очень специфические вещи, вы можете создать свой собственный agentlib, который отправит вам информацию о jvm, который вам нужен.

0 голосов
/ 29 июня 2010

Я верю, что вы ищете именно то, что делает Eclipse MAT . Возможно, вы захотите взглянуть на исходный код ...

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