【发布时间】:2020-04-18 19:09:31
【问题描述】:
我正在为 Go 中一种简单的、虚构的编程语言编写一个虚拟机。我正在使用分析器 pprof 来提高性能。我正在用我自己编造的语言运行斐波那契函数来测试递归函数。
func fib(n) {
if n < 2 {
return n
} else {
return fib(n-1) + fib(n-2)
}
}
print fib(34)
当我运行它需要 14 秒,在 Python 中需要 2 秒。这是来自 PProf 的图片。我用绿色突出显示了我的实际程序的函数调用。它们需要 2 秒,另外 12 秒似乎都是 Go 的垃圾收集器。 有什么办法可以弄清楚为什么垃圾收集器要花这么多时间?
【问题讨论】:
-
可能你配置了堆大小限制,堆太接近满了。可能你的虚拟机没有足够的物理内存,它正在被推入抖动。
-
fib(34)在我的计算机中需要 50 毫秒(递归版本,用 Go 编写)。您在虚拟机中所做的事情我们看不到也无法推理。
标签: go garbage-collection pprof