java - 对于没有保证析构函数的语言,涉及非 gced 内存的语言绑定(bind)?

标签 java c language-binding

当有人从 C 库绑定(bind)到 Java(或任何其他没有保证运行的析构函数的垃圾收集语言)时,他们如何处理非垃圾收集内存的正确释放?

编辑: 我在想什么(我知道这在我原来的问题中没有明确说明)是当一段非 gc'ed 内存包含对其他非 gc'ed 资源的引用时需要释放该对象时释放。例如,如果你有一个非 gc 的链表节点,它是一长串此类节点的头部,你希望 gc 系统最终自动清理它,你如何设置它?

最佳答案

在java中,你有finalize()概念。您可以在那里释放 C 内存。

但是,可能更好的方法是使用 PhantomReferences连同 ReferenceQueue .您可以扩展 PhantomReference 类,以便它保存一些 id 或指针或任何您需要释放的 C 端内存。当它在 ReferenceQueue 中排队时,您可以释放此 id 指向的 C 端内存 - 保证 Java 对象不再“在 Java 中”存在。

关于java - 对于没有保证析构函数的语言,涉及非 gced 内存的语言绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837844/

相关文章:

php - 模板类型作为 SWIG 中的结构数据成员

java - 如何通过 Alfresco Javascript API 连接到 Oracle 数据库

java - 用 Java 编写 GIF 文件

c - 升级到 Python3 - C 数据类型

c - 如何让Ctrl-c结束程序

.net - .net 的 CUDA 绑定(bind)?

c++ - 什么最适合一次编写 native 库并通过语言绑定(bind)跨多种语言使用它?

java - Avro 和 java : deserialized map of string doesn't "equals" original map

java - Hibernate - session.delete() 不会将标识符设置为 null

c - 如何读取缓冲区中保留内容的缓冲区?