[英]Weak Reference Finalizer Guaranteed to Run
Edward Yang 在《 GHC中的弱指针和终结器的代价》中写道(强调):
弱指针还可以选择与终结器关联,终结器在对象被垃圾回收时运行。 Haskell终结器无法保证运行。
我找不到任何证实这一说法的文件。 System.Mem.Weak
中的文档对此并不明确。 我需要知道的是,给定一些具有标识的原语( MutVar#
, MutableArray#
, Array#
等),如果我将终结器附加到该终结器,则在值被GCed时会可靠地调用它吗?
原因是我正在考虑做这样的事情:
data OffHeapTree = OffHeapTree
{ ref :: IORef ()
, nodeCount :: Int
, nodeArray :: Ptr Node
}
data Node = Node
{ childrenArray :: Ptr Node
, childrenCount :: Int
, value :: Int
}
我想确保在OffHeapTree
超出范围时释放数组(以及数组指向的所有内容)。 否则,它将泄漏内存。 那么,是否可以使用mkWeakIORef
可靠地完成此操作?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.