释放用NewDirectByteBuffer包装的内存

时间:2017-10-20 07:29:38

标签: java memory-management java-native-interface nio free

我有一个用JNI NewDirectByteBuffer包裹的内存区域。我想在ByteBuffer的清理器中运行免费/发布代码。有没有办法做到这一点,还是我必须提供用户必须使用ByteBuffer调用的自定义免费方法?

修改

为了澄清,我自己分配了内存并自己调用了NewDirectByteBuffer。我想知道如何与清洁工协调清理工作。

1 个答案:

答案 0 :(得分:2)

您使用JNI.newDirectByteBuffer,您可以手动释放内存,并同时清理工作。

如果您希望自动清理,您需要的是监控对象的生命周期。如果您只想使用API​​而不使用反射,则可以使用PhantomReferenceReferenceQueue,并创建一个恶魔线程来轮询队列。一旦引用位于引用队列中,您的清理工作是否正常。