Могу ли я получить доступ к объекту из памяти другой JVM без запроса этой JVM? - PullRequest
1 голос
/ 05 мая 2010

Есть ли какой-нибудь способ получить доступ к памяти кучи другой виртуальной машины Java? Будет ли это возможно, если я знаю адрес / адрес памяти?

Ответы [ 5 ]

1 голос
/ 05 мая 2010

Есть ли какой-нибудь способ получить доступ к памяти кучи другой виртуальной машины Java?

Я полагаю, вы думаете о том, чтобы сделать что-то вроде создания сегмента общей памяти и сопоставления его с адресным пространством двух JVM.

Это не сработает. Вы можете использовать JNI для создания и сопоставления общего сегмента, но вы не сможете убедить две JVM использовать эту память в качестве динамической памяти. И если вы преодолеете это препятствие, все будет идти ужасно неправильно из-за того, что соответствующие распределители памяти JVM и сборщики мусора мешают друг другу.

Будет ли это возможно, если я знаю ссылку / адрес памяти?

Это не будет иметь никакого значения.

1 голос
/ 05 мая 2010

Ближайшая вещь, которая отвечает вашим потребностям, - это, вероятно, распределенный кэш объектов, такой как Coherence или Terracotta . С помощью этих технологий разные экземпляры JVM могут совместно использовать объекты.

0 голосов
/ 05 мая 2010

Не напрямую, как вы, похоже, намекаете.Вам потребуется, чтобы «другая» JVM открыла доступ к этим объектам через какой-либо сервис, такой как RMI / SOAP, или через методы распределенного объекта, например, Terracotta, а затем вызывала соответствующие сервисные методы для получения объекта.

Даже в этом случае в подавляющем большинстве случаев вы получите объект с таким же значением, но отличающимся (т. Е. Вызов setFoo для вашего объекта не изменит соответствующий объект в другой JVM).Если вы хотите сделать это, вам нужно будет использовать что-то вроде терракоты, которая будет обрабатывать магию для вас.

Но, как и во многих из этих вопросов, если вы хотите сделать это, вам, вероятно, следует переделать свойдизайн.Различные процессы должны иметь возможность координировать между собой, не требуя при этом мутирования одинаковых экземпляров объекта ...: -)

0 голосов
/ 05 мая 2010

То, что вы хотите сделать, звучит невозможно. Если вы хотите получить доступ к данным другой java-программы и не можете реализовать som-интерфейс в рассматриваемой программе (такой как некоторый RMI-интерфейс или somsocket), самое близкое, о чем я могу подумать, - это пройти через отладчик или JVMTI

Интерфейс инструментов JVM TM (JVM TI) - это новый собственный интерфейс программирования для использования инструментами. Он предоставляет как способ проверки состояния, так и контроль выполнения приложений, запущенных на виртуальной машине Java (JVM). Приложения JVM, работающие в TI, поддерживают полный набор инструментов, которым необходим доступ к состоянию JVM, включая, помимо прочего: профилирование, отладку, мониторинг, анализ потоков и анализ покрытия.

0 голосов
/ 05 мая 2010

Нет, это абсолютно невозможно. Если вам нужна общая память, используйте темы.

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