java – 涉及非保证析构函数的语言的非gced内存的语言绑定?

前端之家收集整理的这篇文章主要介绍了java – 涉及非保证析构函数的语言的非gced内存的语言绑定?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

编辑:
我正在考虑的事情(我知道这在我的原始问题中没有明确说明)是当一块非gc’ed内存持有对其他非gc’ed资源的引用时,当该对象需要被释放时释放.例如,如果你有一个非gc’ed链表节点,这是一个很长的这类节点列表的头部,你想让gc系统最终自动清理它,你如何设置它?

最佳答案
在java中,你有finalize()概念.你可以在那里释放C-memory.

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

原文链接:https://www.f2er.com/java/437877.html

猜你在找的Java相关文章