1

好吧,标题说明了一切:我想知道 BEAM 不垃圾收集原子的原因是什么。我知道如何 Erlang 原子可以被垃圾收集的问题 ,但是,虽然相关,但它没有回答为什么

4

1 回答 1

4

因为在当前设计中这是不可能的(或者至少很难做到)。原子是以下方面的重要组成部分:

  • 模块,因为模块名称是原子
  • 函数名,也是原子
  • 分布式 Erlang 也广泛使用原子

尤其是最后一点,这很难。想象一下,我们将有一个用于原子的 GC。如果在我们通过网络发送一些原子的分布式调用之间进行 GC 清理会发生什么?所有这些都使得原子对于 VM 的工作方式非常重要,并且使它们被 GC 不仅会使 VM 的实现更加复杂,而且还会使代码变得更慢,因为原子不需要在进程之间复制并且因为它们不是 GC , 这些可以在 GC 标记步骤中完全省略。

于 2021-06-12T20:42:04.327 回答