Как получить адрес памяти кучи Java?

Как определить адрес в памяти кучи Java для JVM, работающей в текущем процессе? То есть получить указатель void * или эквивалентную непрерывную область памяти, которую JVM выделила для кучи, используя Java, C или другие вызовы?

В Matlab встроена JVM. Память, которую выделяет JVM, недоступна для массивов Matlab, и из-за этого важна куча, поскольку она занимает большой непрерывный кусок памяти и никогда не сжимается, а Matlab также нуждается в непрерывной памяти для своих массивов. Если куча перераспределяется во время расширения, это может привести к фрагментации.

Я бы хотел использовать свой процесс для изучения взаимодействия между кучей Java и представлением памяти Matlab, а также выяснить, когда он перемещается из-за изменения размера, предпочтительно всего изнутри процесса. Для этого нужен адрес кучи. Легко найти размер кучи из java.lang.Runtime, но не его адрес в памяти. Как это можно сделать?

Я использую JRE 1.6.0_04 от Sun в процессе Matlab R2008b на Windows XP и Server 2003. Я понимаю, что это, вероятно, метод конкретного поставщика. Процесс запускает код, который мы написали, поэтому мы можем использовать пользовательский код Java, Matlab, JNI и C /C ++. Вызовы методов Java или поддерживаемые хуки в JVM предпочтительнее низкоуровневых хакеров.

РЕДАКТИРОВАТЬ: цель этого состоит в том, чтобы исследовать взаимодействие между GC JVM и GC Matlab. Мне не нужно заглядывать в кучу Java, и я не буду ничего читать из этой памяти; Я просто хочу увидеть, где он находится в контексте общего пространства виртуальной памяти, в которое GC Matlab также пытается вписать данные.

7 голосов | спросил Andrew Janke 13 Maypm09 2009, 22:30:31

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132