スクラッチスペース用の一時バッファが必要なCライブラリがあります。ダイレクトバイトバッファのアドレスを渡すことを考えています。
VMは、最終的に解放される前にバッファーを再配置することを許可されていますか?JNIフレームがなくなると、ネイティブライブラリはポインタを保持します。私の理解では、VMがGC中にそれらを再配置する可能性があるため、JNIローカルオブジェクト参照をキャッシュすることはできません。これはバッファアドレスに適用されますか?
Javaでバッファを割り当ててから、バッファオブジェクトをスコープ外にすると、VMがバッファメモリを解放することを理解しています。NewDirectByteBufferを使用してネイティブコードで新しいバッファを作成する場合、バッキングメモリを解放するのは誰の責任ですか?
NewDirectByteBufferと、直接バッファーですでに使用されているアドレスを使用して、ネイティブコードで新しいバッファーを作成するとどうなりますか?メモリは二重に解放されますか?VM参照はメモリブロックをカウントし、それを参照する最後のバッファがガベージコレクションされたときにそれを解放しようとしますか?