释放用 NewDirectByteBuffer 包装的内存
Freeing memory wrapped with NewDirectByteBuffer
我有一个用 JNI 包装的内存区域 NewDirectByteBuffer
。我想运行 free/release代码中的清洁器ByteBuffer
。有没有办法做到这一点,或者我是否必须提供用户必须使用 ByteBuffer
?
调用的自定义免费方法
编辑
为了澄清,我自己分配了内存并自己调用了NewDirectByteBuffer
。我想知道我应该如何与清洁工协调清理。
您使用JNI.newDirectByteBuffer
,您可以而且应该手动释放内存,同时清理工作。
如果你想让它自动清理,你需要的是监控对象的生命周期。如果你只想使用 API 而不想使用反射,你可以使用 PhantomReference
和 ReferenceQueue
,并创建一个恶魔线程来轮询队列。一旦引用在引用队列中,就做你的清理工作。
我有一个用 JNI 包装的内存区域 NewDirectByteBuffer
。我想运行 free/release代码中的清洁器ByteBuffer
。有没有办法做到这一点,或者我是否必须提供用户必须使用 ByteBuffer
?
编辑
为了澄清,我自己分配了内存并自己调用了NewDirectByteBuffer
。我想知道我应该如何与清洁工协调清理。
您使用JNI.newDirectByteBuffer
,您可以而且应该手动释放内存,同时清理工作。
如果你想让它自动清理,你需要的是监控对象的生命周期。如果你只想使用 API 而不想使用反射,你可以使用 PhantomReference
和 ReferenceQueue
,并创建一个恶魔线程来轮询队列。一旦引用在引用队列中,就做你的清理工作。