何时以及如何是仁王直接缓冲区释放了?
-
12-09-2019 - |
题
我有一个C库想要一个暂时的缓冲器,用于刮空间。我正在考虑通过该地址的直接字节的缓冲区。
是VM曾经允许搬迁的缓冲器之前,它是最终释放了?土库将保持在指针后JNI框架进程。我的理解是,JNI当地对象引用无法可缓,因为虚拟机可能把他们重新安置期间的GC。这是否适用于缓冲地址?
我了解虚拟机会免费缓冲存储器,如果我分配一个缓冲区在Java然后让我们缓冲的对象超出范围。如果我创建了一个新的缓冲地代码使用NewDirectByteBuffer,其责任是免费的背记忆?
会发生什么,如果我创建一个新的缓冲地代码使用NewDirectByteBuffer和地址已经在使用的一个直接的缓冲器?将存储以双释放了?将VM参考数的记忆区块,并试图免费的时的最后一个缓冲区参考,它是垃圾收集的?
解决方案
是VM曾经允许搬迁 缓冲区之前它是最终释放了?
它不会重新定位,因为直接缓冲区不一部分的GC堆。
如果我创建了一个新的缓冲器,在本地 代码使用NewDirectByteBuffer,他的 责任是免费的 背的记忆?
这是你的(地代码)的责任,以免它。JVM不可能不知道有什么方法被用来分配后备存储(可能是malloc会,可能是一个静态的缓冲器,等等。)
会发生什么,如果我创建一个新的缓冲器 在机代码的使用 NewDirectByteBuffer和一个地址 已经在使用的一个直接的缓冲器?
鉴于VM不会试图免费存储器,其地址是传递给NewDirectByteBuffer,什么都不会发生,如果你通过同一地址的两倍。
不隶属于 StackOverflow