com*_*man 5 c java language-binding
当有人从C库绑定到Java(或任何其他垃圾收集语言而没有保证运行的析构函数)时,它们如何处理非垃圾收集内存的正确释放?
编辑:我正在考虑的事情(我知道这在我的原始问题中没有明确说明)是当一块非gc'ed内存保存对其他非gc'ed资源的引用时需要释放的对象被释放.例如,如果你有一个非gc'ed链表节点,这是一个很长的这类节点列表的头部,你想让gc系统最终自动清理它,你如何设置它?
在java中,有finalize()的概念。您可以在那里释放 C 内存。
然而,更好的方法可能是将PhantomReferences与ReferenceQueue一起使用。您可以扩展 PhantomReference 类,以便它保存一些 id 或指针或任何指向您需要释放的 C 端内存的内容。当它在 ReferenceQueue 中排队时,您可以释放该 id 指向的 C 端内存 - Java 对象保证不再“在 Java 中”存在。
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |