我如何垃圾收集 Elixir REPL,iex?

问题描述

在 python 中,如果我在玩 REPL,我可以使用 import gc; gc.collect() 强制垃圾收集。我如何使用 Elixir 的 iex REPL 做同样的事情?

大变量绑定前的例子:

enter image description here

所以大约使用了 700M 的 RAM 和 300M 的交换空间。

将大数据绑定到变量 xx 之后(从数据库提取 500 个时间序列,每个 7000 个结构):

enter image description here

所以现在大约使用 2.2G 和 500M 交换。现在将 xx 重新绑定到一些小东西:

enter image description here

但是使用的内存并没有真正改变。仍然是 2.2G RAM 和大约 500M 的交换。但是,如果我退出 IEX:

enter image description here

回到使用的内存不足 400M。因此,重新绑定的大数据绑定不会在 iex 内进行垃圾回收。我怎样才能强迫它这样做?

解决方法

这里有关于此的信息:https://erlang.org/doc/apps/erts/GarbageCollection.html

也许只是尝试这样做:

:erlang.garbage_collect()