我有一个用JNI NewDirectByteBuffer
包裹的内存区域。我想在ByteBuffer
的清理器中运行免费/发布代码。有没有办法做到这一点,还是我必须提供用户必须使用ByteBuffer
调用的自定义免费方法?
修改
为了澄清,我自己分配了内存并自己调用了NewDirectByteBuffer
。我想知道如何与清洁工协调清理工作。
答案 0 :(得分:2)
您使用JNI.newDirectByteBuffer
,您可以手动释放内存,并同时清理工作。
如果您希望自动清理,您需要的是监控对象的生命周期。如果您只想使用API而不使用反射,则可以使用PhantomReference
和ReferenceQueue
,并创建一个恶魔线程来轮询队列。一旦引用位于引用队列中,您的清理工作是否正常。