我有一个 C 库,它需要一个临时缓冲区作为暂存空间。我正在考虑将直接字节缓冲区的地址传递给它。
是否允许虚拟机在最终释放缓冲区之前重新定位缓冲区?在 JNI 框架消失后,本机库将保留指针。我的理解是无法缓存 JNI 本地对象引用,因为 VM 可能会在 GC 期间重新定位它们。这适用于缓冲区地址吗?
我知道如果我在 Java 中分配一个缓冲区然后让缓冲区对象超出范围,VM 将释放缓冲区内存。如果我使用 NewDirectByteBuffer 在本机代码中创建一个新缓冲区,那么释放后备内存是谁的责任?
如果我使用 NewDirectByteBuffer 在本机代码中创建一个新缓冲区和一个已被直接缓冲区使用的地址,会发生什么情况?内存会被双重释放吗?当最后一个引用它的缓冲区被垃圾收集时,VM 引用会计算内存块并尝试释放它吗?