【发布时间】:2011-12-28 17:48:36
【问题描述】:
我是 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 获得一个不错的示例代码,我会非常高兴
【问题讨论】:
-
你知道对象可以在内存中移动吗? (虽然它们可以暂时固定。)
-
是的,我知道……有什么办法可以在 JVMTI 中做到这一点……我不在乎他们下一秒是否移动……我只想找到他们的实际在那个特定时刻的记忆位置。
-
我相信你实际上并不需要它。无论如何,
sun.misc.Unsafe就是您要搜索的内容。 -
我已经尝试过 Unsafe 类,但我找不到数组的内存位置...如果我可以使用 Unsafe 类,如果您告诉我如何使用,我会非常高兴。但我相信 jvmti 是答案......这可能没有意义,但我真的需要这个,我正在研究一些东西,这个答案对我很有帮助