java - 释放用 NewDirectByteBuffer 包装的内存

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

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

编辑

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

最佳答案

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

如果你想让它自动清理,你需要的是监控对象的生命周期。如果您只想使用 API 而不想使用反射,则可以将 PhantomReferenceReferenceQueue 一起使用,并创建一个恶魔线程来轮询队列。一旦引用在引用队列中,就进行清理工作。

关于java - 释放用 NewDirectByteBuffer 包装的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46844275/

相关文章:

android-ndk - 为什么会出现本地引用表溢出?

android - 当在 android 的 config.xml 中启用 hfpclient 并尝试配对设备时,我在 hfpclient 的 JNI 接口(interface)中看到崩溃

java - 使用 JNI 将 GPB 序列化数据从 Java 高效传递到 C++

c++ - new/delete 和 malloc/free 有什么区别?

c++ - 什么时候适合使用 "delete this"?

memory-management - Julia 中的预分配

java - JDK 更新后 Netbeans JDBC 错误 "Unable to find suitable driver"

java - 我的 Android Studio 应用程序可能出现什么问题?

java - 在大量插入 SQLLDR 后获取或检索生成的 PK

java - 在java中存储更多维度数据的最佳方式?