当有人从 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/