java - 使用 sun.misc.Unsafe 获取 Java 数组项的地址?

标签 java pointers memory native unsafe

我很难理解 sun.misc.Unsafe 的文档——我猜因为它不适合一般用途,所以没有人真正关心让它可读——但我真的需要一种方法来找到它的地址数组中的一个元素(以便我可以将指向它的指针传递给 native 代码)。有没有人有任何工作代码可以做到这一点?靠谱吗?

最佳答案

您可以使用 ByteBuffer.allocateDirect() 直接缓冲区,而不是使用数组。这在字段中具有地址,并且此地址在 ByteBuffer 的生命周期内不会改变。直接 ByteBuffer 使用最小的堆空间。可以通过反射获取地址。


你可以使用Unsafe来获取地址,问题是GC可以随时移动它。对象在内存中不是固定的。

在 JNI 中,您可以使用特殊方法将数据复制到 Java 对象或从 Java 对象复制数据以避免此问题(以及其他问题)如果您想使用 C 代码在对象之间交换数据,我建议您使用这些方法。

关于java - 使用 sun.misc.Unsafe 获取 Java 数组项的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934779/

相关文章:

c++ - 在 C++ 或 C 中使用整数和字符指针?

c - 共享内存程序不同步 - 出现段错误

Java堆内存

Java:找出正在使用所有内存的内容

java - GWT-Rpc 如何返回文件以便浏览器弹出下载对话框

java - 如何在 Java/GWT Web 应用程序中实现 Log4j-audit

java - 良好的 OO 实践 + 我们是否应该为了 OO 而在子类中实现复杂的逻辑?

java - Autowiring 强类型集合时出现问题

c - 指针和数组—艰苦学习C

node.js - 从 node.js 应用程序中将字符串安全地存储在内存中