如何使用 JVMTI 获取 java 对象的内存地址(不是哈希码)
我是 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果对象不覆盖
hashCode()
,则默认实现会以整数形式返回对象的内部地址。同样,这可能不是最好的方法。有关更多信息单击此处
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.For more info click here