在我的应用程序中,我正在使用跨线程共享的MutableArray
s(通过primitive包)。我知道什么时候不再使用单个元素,我想某种方式(unsafeMarkGarbage
或者其他东西)向运行时指示它们可以被收集。如果存在这样的函数或等效技术,至少我想试验一下。
编辑,添加更多细节:我有一个概念性的“无限磁带”实现为短MutableArray
段的链接列表,如:
data Seg a = Seg (MutableArray a) (IORef (Maybe (Seg a)))
我使用并发计数器访问磁带,并始终知道何时不再访问磁带的元素。在某些情况下,当一个线程被取消调度时,可能已经GC的整个数组段(数组及其元素)都会被粘住,因为它们的引用将会持续存在。
理想的解决方案是避免额外的写入(可能是愚蠢的),避免数组中的另一层间接,并允许在所有元素到期时收集整个MutableArray
。
Weak
引用似乎是我见过的最有前途的机制,但我还不知道他们如何在这里帮助我。
答案 0 :(得分:3)
我建议您将undefined
存储在您想要垃圾回收的位置。