получить доступ к исходной памяти JVM - PullRequest
1 голос
/ 03 декабря 2009

Простите, если это невежественный вопрос, я не совсем опытный программист, просто любопытно. Можно ли прочитать рабочую память, скажем, для экземпляра класса, из работающей программы?

Я знаю, что вы можете сделать что-то вроде println(theInstance.getClass());, и это даст вам адрес памяти экземпляра (я предполагаю, что это так). Мне интересно, можно ли сделать что-то вроде byte[]memory = theInstance.getClass().getMemory(); println(toString(memory)); Я знаю, что все это выдумано, но только для иллюстрации.

Ответы [ 3 ]

3 голосов
/ 03 декабря 2009

Не использует стандартные API Java. Однако вы можете получить доступ к памяти через sun.misc.Unsafe (вам, вероятно, потребуется использовать отражение, чтобы получить экземпляр этого класса). Конечно, вы также можете сделать это через JNI.

Но почему вы хотите?

2 голосов
/ 03 декабря 2009

Нет, печать результата getClass () не дает «адрес памяти»; он дает строковое представление класса (что-то вроде «class Argyle»).

Из вашего вопроса неясно, что вы ожидаете от содержания такой вещи. Если вы хотите понять, как Java представляет объекты в памяти, прочитайте спецификацию VM . С другой стороны, виртуальная машина Java не требует какой-либо конкретной внутренней структуры для объектов .

0 голосов
/ 04 декабря 2009

Я не смотрел на это в последнее время, но если в Linux вы можете искать / читать /proc/PID/mem.

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