我正在学习Elixir,并希望确定我理解垃圾收集在Erlang虚拟机中是如何工作的。BEAM(Erlang VM)并行执行垃圾回收吗?
我的理解是这样的:
- 每个VM级进程都有自己的堆
- 如果这堆没有填满它终止之前,它与过程丢弃,需要 没有GC
- 堆那些填满的垃圾分别回收,并行,所以GC不会“阻止世界”,只是一个过程
这是正确的吗?
我正在学习Elixir,并希望确定我理解垃圾收集在Erlang虚拟机中是如何工作的。BEAM(Erlang VM)并行执行垃圾回收吗?
我的理解是这样的:
这是正确的吗?
进行垃圾回收。当需要收集其他 语言的垃圾时,整个系统必须停止运行垃圾收集器 。如果您的计算机程序 应该运行一次,写入一些输出,然后退出,则此方法非常好。但在 长时间运行的应用程序(如桌面,移动设备或服务器 )中,此策略会导致偶尔冻结的用户界面和缓慢的响应时间。另一方面,Erlang程序可以拥有数千个独立堆,这些堆是分别垃圾收集的;在这个 的方式中,垃圾收集的性能损失分散在 以上,所以长时间运行的应用程序不会神秘地停止 在垃圾收集器运行时不时响应。
Evan Miller, creator of the popular Chicago Boss framework.
所以我相信二郎山垃圾收集的同时,也就是不同的堆是收集彼此独立的垃圾。是否有任何并行化取决于您的节点是否在多核心上运行,但如果是这样,那么垃圾收集是并行完成的,是的。
他没有说其他语言没有并发垃圾收集。 –
... *用其他语言*;这是否意味着一个,很多,所有?无论如何,我不认为这是语言特定的。垃圾收集已经随着时间的推移而发展,并且仍然会在未来发展。重要的一点是Erlang GC支持并发GC,它可以回答这个问题。 –
啊,我陷入了困境。在这种情况下,他正在为有经验的程序员写信,所以他们可能会知道虚拟机和语言功能几乎不是唯一的。他只是强调了一个在流行替代品中不太常见的erlang特性,并且可能经过了更多的战斗测试 - 更多的是可能性而不是绝对的。 –
您是否已经阅读过此文件:http://prog21.dadgum.com/16.html – Berzemus
是的,这是正确的。 –
是的,每个进程都有自己的垃圾回收。 –