如何使用JVMTI获取java对象的内存地址(而不是哈希码)

时间:2011-12-28 17:48:37

标签: java memory object jvmti

我是C和C ++的初学者,我不太清楚如何使用JVMTI。我想获取java对象的物理内存位置(十六进制)。可能吗?我不想得到像“从这个探查器等获取它”的答案...... 到目前为止,我在linux终端中使用此命令:

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

获得一个很好的示例代码,我将非常高兴

1 个答案:

答案 0 :(得分:0)

如果对象没有覆盖hashCode(),则默认实现将对象的内部地址作为整数返回。同样,这可能不是最好的方法。

  

这通常是通过转换内部地址来实现的   将对象转换为整数,但这种实现技术不是   JavaTM编程语言所要求的。

了解更多信息click here