【发布时间】:2013-05-05 05:51:44
【问题描述】:
是否可以在 JNI 方法中获取 Java 对象的地址?或者通过任何其他方法。
如果无法获得对象的真实地址,那么有没有办法确定数据结构的内存布局?
(这只是一个例子,我的问题的描述在这一行之上。)
例如,我有一个“对象”数组(或任何其他类型的容器,例如 ArrayList、LinkedList 等),我想知道这些“对象”(不是容器内的引用)是如何分配的在堆中,它们可能不是连续分配的,甚至是随机排序的。那么我能得到任何相关信息吗?
编辑: 这里换个思路,有没有其他的Java虚拟机可以处理这种低级的事情?例如,Jikes,甚至 Dalvik。
【问题讨论】:
-
数组是连续分配的。 JVM Specification 需要它。不是一个真正的问题。
-
对象是引用对吗?如果我为数组中的每个元素分配具有任意顺序的新对象怎么办?此外,数组只是一个例子,如果我使用 ArrayList 或 LinkedList。
-
“如果”仍然使它成为一个过于模棱两可的问题。
-
这个问题不是模棱两可 - 对于了解 JNI 的人来说,这很清楚。
-
@EJP 我想我的目的很明确,我想得到一个“对象”数组的这些“对象”的内存布局。就像你说的,它们的引用可能是连续分配的,但我想知道对象是如何在堆上分配的。
标签: java memory java-native-interface