This paper提出了一种技术,用于实现具有快速相等,集合和映射的函数式语言,使用井下的哈希值。据我所知,它将哈希模式值的地址用作将其插入地图时的键。这具有以下优点:基本上任何值的散列密钥都是O(1)
,而不是O(N)
标准。但我不明白的是:垃圾收集后地图会发生什么?由于GC过程将导致每个值的地址发生变化,因此映射的配置将不正确。换句话说,无法保证addr(value)
在程序的生命周期内保持不变。
答案 0 :(得分:2)
由于GC过程会导致每个值的地址发生变化
只有移动垃圾收集者才能这样做。当使用标记和扫描等非移动算法时,所有发生的事情都是在GC循环期间释放未使用的对象 - 使用过的对象保持原样。
移动垃圾收集器通常被认为比标记和扫描更可取,但根据文章的摘要"标记和扫描在最大共享环境中变得很快",这进一步扩展见2.4.4节。
本文还介绍了一种使移动垃圾收集器工作的方法(通过为每个对象分配一个唯一的id并使用它而不是其地址),但认为这是不切实际的(见第2.4.2节)。