当有人从C库绑定到Java(或任何其他垃圾收集语言而没有保证运行的析构函数)时,它们如何处理非垃圾收集内存的正确释放?
编辑:
我正在考虑的事情(我知道这在我的原始问题中没有明确说明)是当一块非gc’ed内存持有对其他非gc’ed资源的引用时,当该对象需要被释放时释放.例如,如果你有一个非gc’ed链表节点,这是一个很长的这类节点列表的头部,你想让gc系统最终自动清理它,你如何设置它?
最佳答案
在java中,你有finalize()概念.你可以在那里释放C-memory.
原文链接:https://www.f2er.com/java/437877.html但是,可能更好的方法是使用PhantomReferences和ReferenceQueue.您可以扩展PhantomReference类,使其保存一些id或指针或任何你需要释放的C端内存.当它在ReferenceQueue中排队时,您可以释放此id指向的C端内存 – 保证Java对象不再存在于“Java”中.