【发布时间】:2020-11-16 20:06:06
【问题描述】:
我最近开始使用 Erlang 进行编程,关于垃圾回收 (GC),我想了解一些事情。据我了解,每个进程的私有堆都有一个分代GC,全局共享堆有一个引用计数GC。
我想知道的是有没有办法得到:
- 收集周期数是多少?
- 在全局级别或进程级别分配和释放了多少字节?
- 什么是私有堆和共享堆大小?我们可以将其定义为 GC 参数吗?
- 收集垃圾需要多长时间?所需时间的百分比?
- 有没有办法在没有 GC 的情况下运行程序?
在我运行 Erlang 程序时,有没有办法通过代码或使用某些命令来获取此类信息?
谢谢。
【问题讨论】:
-
我建议阅读 this blog post 并查看 recon library,两者均由 Fred Hébert 提供,也是 learn you some Erlang for great good! 的作者。
-
理解你为什么问这个问题会很有趣。例如,您当前是否在您的 Erlang 应用程序中遇到 GC 问题,或者您是否在使用其他语言(如 Java)时遇到过令人失望的经历。请记住,Erlang GC 是针对 Erlang 进程的,而 GC 是针对 Java 的每个 JVM。这意味着行为完全不同。 Erlang 永远不会产生一次大的 GC。
-
“请记住,Erlang GC 是针对 Erlang 进程的,而 GC 是针对 Java 的 JVM”——我很清楚这一点,谢谢!我只是想了解 Erlang 的 GC 协议有多好。为此,我想尝试使用此类信息进行一些基准测试。顺便说一句,如果您知道有关 Erlang 的任何相关且有趣的基准测试,请告诉我。
-
好佛朗哥。当越来越多的人意识到每个 JVM 的 GC 是一个真正的问题时,将会很有趣。即使使用像分代这样的“现代”GC,您通常也会每天左右完全停止一次,GC 会阻塞系统 10 到 100 秒。 GC 在堆大小方面不是线性过程这一事实尚未影响系统设计
标签: memory-management garbage-collection erlang