根据这个mark-and-sweep,go后面有一个规格说明垃圾收集机制。但是是谁干的呢?
发布于 2015-02-28 03:11:59
你们的许多问题在这里得到回答:
其余的:
但是是谁干的呢?
Go实现提供的本机代码运行时库。
(我还没有看过这个实现,但很难想象在Go语言中,可以实现高性能的GC for Go“在行上”)。
Go代码将编译成本机二进制文件,对吗?
对,是这样。“围棋常见问题解答”说得很清楚。
因此,不会有像Java这样的虚拟机可以依赖。
对,是这样。然而,这并没有什么区别。在Java情况下,GC也由Java运行时提供的本机代码库实现。
那么这肮脏的工作是谁为我们做的?神秘的线索?还是只吃一只猩猩?
从1.1开始,GC是并行的,所以必须有某种多线程在幕后进行。Goroutines是一个Go语言概念,很难想象在本机代码GC实现中“在行下”使用它们。(但我可能错了.)
但是,您还需要了解,goroutines还需要在引擎盖下包含多个线程。FAQ说:
“为什么我的多线程程序不使用多个CPU?” 您必须设置GOMAXPROCS环境变量,或者使用运行时包的同名函数来允许运行时支持使用多个OS线程。“
看见?遮罩下包含本机/ OS线程。
https://stackoverflow.com/questions/28777573
复制相似问题