我知道在 Java 中这是一个奇怪的问题, 但是有没有办法让 Java 动态内存分配与某些对齐约束对齐? 例如,是否可以动态分配与页面大小对齐的对象?
我之所以要这样做是因为我要通过JNI接口(interface)从本地代码访问Java对象,而本地代码库要求对象对齐。
谢谢。
最佳答案
不,这是不可能的。请记住,Java 中堆上的对象可以在垃圾回收期间移动。您有一些选择:
- 停止直接从 JNI 访问 Java 对象。将您关心的内容复制到 native 代码已经对齐的 JNI 提供的缓冲区中。
- 使用ByteBuffer.allocateDirect() .然后找到正确对齐的缓冲区区域。一种方法是在启动时分配缓冲区,并在不同的偏移量处重复尝试对齐敏感操作,直到它起作用。这是黑客攻击!
关于Java内存分配对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5268110/