Я новичок в C и C++, и я не очень хорошо знаю, как использовать JVMTI. Я хочу получить физическую ячейку памяти (в шестнадцатеричной форме) объекта java. Является ли это возможным? Я не хочу, чтобы получить ответы, как «получить от этого профилировщика и т.д.» ... До сих пор я использую эту команду в Linux терминале:Как получить адрес памяти (а не хэш-код) java-объекта с помощью JVMTI
java -showversion -agentpath:../CPrg/DLL/bin/Debug/libDLL.so SimpleMemAlloc
libDLL.so является библиотекой Я создаю с помощью c, где я запускаю его с помощью java-приложения. Он действительно работает, он работает с моим кодом, но я не знаю, как получить нужные данные.
Например, я использую этот простой код:
public class SimpleMemAlloc{
Object [] oarray = new Object[10000];
public static void main(String args []){
Object [] o= new Object[100];
for (int i= 0; i<100; i++){
o[i] = new Integer [10000];
}
}
}
Я хочу, чтобы получить место в памяти (0x ...) каждого нового массива целых чисел, которые я создаю ... Я буду очень рад если я получу хороший пример кода, используя jvmti
Вы понимаете, что объекты могут быть перемещены в памяти? (Хотя они могут быть временно привязаны.) –
Да, я знаю, что ... Есть ли способ, которым я могу это сделать в JVMTI ... Мне все равно, если в следующую секунду они перемещаются ... Я просто хочу найти их фактическое местоположение памяти в этот конкретный момент. –
Я считаю, что вам это не нужно. В любом случае 'sun.misc.Unsafe' - это то, что вы ищете. –