Как определить адрес в памяти кучи Java для JVM, работающей в текущем процессе? То есть получить указатель void * или эквивалентную непрерывную область памяти, выделенную JVM для кучи с использованием Java, C или других вызовов?
В Matlab встроена JVM. Память, которую выделяет JVM, недоступна для массивов Matlab, и из-за этого важна куча, поскольку она занимает большой непрерывный кусок памяти и никогда не сжимается, а Matlab также нуждается в непрерывной памяти для своих массивов. Если куча перераспределяется во время расширения, это может привести к фрагментации.
Я бы хотел использовать свой процесс для изучения взаимодействия между кучей Java и представлением памяти Matlab и выяснить, когда он движется из-за изменения размера, предпочтительно всего изнутри процесса. Для этого нужен адрес кучи. Легко найти размер кучи из java.lang.Runtime, но не его адрес в памяти. Как это можно сделать?
Я использую Sun JRE 1.6.0_04 в процессе Matlab R2008b на Windows XP и Server 2003. Я понимаю, что это, вероятно, метод, зависящий от поставщика. Процесс запускает код, который мы написали, поэтому мы можем использовать пользовательский код Java, Matlab, JNI и C / C ++. Вызовы методов Java или поддерживаемые перехватчики в JVM предпочтительнее хакерских атак низкого уровня.
РЕДАКТИРОВАТЬ: Цель этого состоит в том, чтобы исследовать взаимодействие между GC JVM и GC Matlab. Мне не нужно заглядывать в кучу Java, и я не буду ничего читать из этой памяти; Я просто хочу посмотреть, где он находится в контексте общего пространства виртуальной памяти, в которое GC Matlab также пытается вписать данные.