【问题标题】:Does BEAM (the Erlang VM) do garbage collection in parallel?BEAM(Erlang VM)是否并行进行垃圾收集?
【发布时间】:2014-07-23 01:33:16
【问题描述】:

我正在学习 Elixir,并想确保我了解垃圾收集在 Erlang VM 中的工作原理。

我的理解是这样的:

  • 每个 VM 级进程都有自己的堆
  • 如果该堆在终止前没有填满,它会随进程一起丢弃,并且不需要 GC
  • 填满的堆是单独收集的垃圾,并行,因此 GC 不会“停止世界”,只是一个进程

这是正确的吗?

【问题讨论】:

  • 您是否已阅读此内容:prog21.dadgum.com/16.html
  • 是的,这是正确的。
  • 是的,每个进程都有自己的垃圾回收器。

标签: garbage-collection erlang elixir


【解决方案1】:

进行垃圾收集。什么时候在其他地方收集垃圾 语言,整个系统必须停止,而垃圾收集器 运行。如果您的计算机程序是,这种方法非常好 应该运行一次,写一些输出,然后退出。但在 长时间运行的应用程序,例如桌面、移动或服务器 程序,这种策略会导致偶尔冻结 UI 和缓慢 响应时间。另一方面,Erlang 程序可以有数千个 单独收集垃圾的独立堆;在这 方式,垃圾收集的性能损失分散在 时间,所以一个长时间运行的应用程序不会神秘地停止 在垃圾收集器运行时不时响应。

Evan Miller, creator of the popular Chicago Boss framework.

所以我相信erlang垃圾收集是并发的,也就是说,各个堆是相互独立的垃圾收集。是否有任何并行化取决于您的节点是否在多个内核上运行,但如果是,那么垃圾收集是并行完成的,是的。

【讨论】:

  • 他没有说其他语言没有并发垃圾回收。
  • ... 其他语言;这是否意味着一个,许多,所有?无论如何,我不认为这是特定于语言的。垃圾收集随着时间的推移而发展,并且在未来仍将发展。重点是 Erlang GC 支持并发 GC,这就回答了这个问题。
  • 啊,我明白了。在这种情况下,他是为有经验的程序员写作的,所以他们应该知道虚拟机和语言特性实际上从来都不是独一无二的。他只是在强调一个 erlang 特性,该特性在流行的替代方案中不太常见,而且可能经过了更多的实战测试——更多的是概率而不是绝对值。
  • 这个视频很好地讨论了 BEAM 的一些不错的功能:youtube.com/…
猜你喜欢
  • 2020-02-11
  • 2016-05-19
  • 2011-07-16
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多