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

发布于 2024-12-23 00:34:58 字数 681 浏览 1 评论 0原文

我是 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 获得一个不错的示例代码,我将非常高兴

I am a beginner in C and C++ and I don't know very well how to use the JVMTI. I want to get the physical memory location (in hexadecimal) of a java object. Is it possible? I don't want to get answers like "get it from this profiler etc" ...
So far I am using this command in linux terminal :

java -showversion -agentpath:../CPrg/DLL/bin/Debug/libDLL.so SimpleMemAlloc

The libDLL.so is the library I am creating using c where I run it with my java application. It actually works, it runs with my code but I don't know how to get the data I want.

For example I am using this simple code:

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];
        }
    }
}

I want to get the memory location (0x...) of every new integer array that I create...
I will be very happy if I get a nice sample code using the jvmti

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜警司 2024-12-30 00:34:58

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

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

有关更多信息单击此处

If the object doesn't overwrite the hashCode() the default implementation returns the internal address of the object as a integer. Again this might not be the best way of doing this.

This is typically implemented by converting the internal address of
the object into an integer, but this implementation technique is not
required by the JavaTM programming language.

For more info click here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文