【问题标题】:How does the "Implementing FP languages with fast equality, sets and maps..." technique deal with garbage collection?“使用快速相等、集合和映射实现 FP 语言……”技术如何处理垃圾收集?
【发布时间】:2015-02-11 17:58:23
【问题描述】:

This paper 提出了一种技术,用于实现具有快速相等、集合和映射的函数式语言,在底层使用 hash-consing。据我了解,在将其插入地图时,它使用哈希值的地址作为其键。与O(N) 标准相反,这具有计算基本上任何值的散列键是O(1) 的优点。但是,我不明白的是:垃圾收集后地图会发生什么?由于GC过程会导致每个值的地址发生变化,那么map的配置就会不正确。换句话说,不能保证addr(value) 在程序的整个生命周期内都是一样的。

【问题讨论】:

  • 论文关于垃圾收集的部分没有回答你的问题吗?
  • 不,这就是为什么我问...
  • 我想我错过了一些非常明显的东西,因为你发表了评论,但不知何故我无法把它包裹起来......如果你能说出它是什么,我会很高兴!

标签: hash functional-programming garbage-collection


【解决方案1】:

由于GC过程会导致每个值的地址发生变化

只有移动垃圾收集器才能做到这一点。当使用诸如标记和清除之类的非移动算法时,所发生的只是未使用的对象在 GC 周期中被释放 - 已使用的对象保持在它们所在的位置。

移动垃圾收集器通常被认为比标记和清除更可取,但根据论文“标记和清除在最大共享环境中变得快速”的摘要,这在第 2.4 节中进一步扩展。 4.

该论文还描述了一种使移动垃圾收集器工作的方法(通过为每个对象分配一个唯一的 id 并使用它而不是其地址),但认为这是不切实际的(第 2.4.2 节)。

【讨论】: