【问题标题】:How to obtain Java "object" address in Java Native Interface如何在 Java Native Interface 中获取 Java“对象”地址
【发布时间】:2013-05-05 05:51:44
【问题描述】:

是否可以在 JNI 方法中获取 Java 对象的地址?或者通过任何其他方法。

如果无法获得对象的真实地址,那么有没有办法确定数据结构的内存布局?


(这只是一个例子,我的问题的描述在这一行之上。)

例如,我有一个“对象”数组(或任何其他类型的容器,例如 ArrayList、LinkedList 等),我想知道这些“对象”(不是容器内的引用)是如何分配的在堆中,它们可能不是连续分配的,甚至是随机排序的。那么我能得到任何相关信息吗?


编辑: 这里换个思路,有没有其他的Java虚拟机可以处理这种低级的事情?例如,Jikes,甚至 Dalvik。

【问题讨论】:

  • 数组是连续分配的。 JVM Specification 需要它。不是一个真正的问题。
  • 对象是引用对吗?如果我为数组中的每个元素分配具有任意顺序的新对象怎么办?此外,数组只是一个例子,如果我使用 ArrayList 或 LinkedList。
  • “如果”仍然使它成为一个过于模棱两可的问题。
  • 这个问题不是模棱两可 - 对于了解 JNI 的人来说,这很清楚。
  • @EJP 我想我的目的很明确,我想得到一个“对象”数组的这些“对象”的内存布局。就像你说的,它们的引用可能是连续分配的,但我想知道对象是如何在堆上分配的。

标签: java memory java-native-interface


【解决方案1】:

【讨论】:

  • stackoverflow.com/questions/7060215/… - 这可能有助于为此目的使用Unsafe
  • @prunge 这实际上可以解决问题,但是每次我编译它时,警告说“将来可能会删除 Unsafe”真的很令人不安。无论如何,这似乎是不接触 OpenJDK 中的源代码的唯一方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 2011-02-25
相关资源
最近更新 更多