我有一个C库需要一个临时缓冲区用于临时存储。我正在考虑将直接字节缓冲区的地址传递给它。
在最终释放之前,VM是否允许重定位缓冲区?本地库将在JNI帧消失后保持指针。我的理解是JNI本地对象引用不能被缓存,因为VM可能在GC期间重新定位它们。这是否适用于缓冲区地址?
我知道如果我在Java中分配缓冲区然后让缓冲区对象超出范围,VM会释放缓冲区内存。如果我在本地代码中使用NewDirectByteBuffer创建一个新的缓冲区,谁负责释放支持内存?
如果我在本地代码中使用NewDirectByteBuffer创建一个新的缓冲区并使用已经被直接缓冲区使用的地址,会发生什么?内存会被双倍释放吗?当最后一个引用该内存块的缓冲区被垃圾回收时,VM会引用计数内存块并尝试释放它吗?