谁去垃圾收集工作?

时间:2015-02-28 02:52:01

标签: go garbage-collection

根据这个specification,go后面有一个标记 - 扫描垃圾收集机制。但谁做到了?

  • Go代码将编译为原生二进制文件,对吧?因此,不会有像Java这样可以依赖的虚拟机。那么谁为我们做了肮脏的工作?一个神秘的线程?或者只是一个goroutine?

  • 垃圾收集程序停止世界会像Java的完整GC吗?任何人都能说出Java和Go之间GC机制的区别吗?我很难在网上找到材料。

1 个答案:

答案 0 :(得分:2)

您的许多问题都在这里得到解答:

其余的:

  

但是谁做到了?

Go实现提供的本机代码运行时库。

(我没有看过实现,但很难想象你可以用Go语言在Go“线上”实现Go的高性能GC。)

  

Go代码将编译为原生二进制文件,对吧?

正确。 Go常见问题解答说得很清楚。

  

因此,不会有像Java这样可以依赖的虚拟机。

正确。但是,这没有任何区别。在Java情况下,GC也由Java运行时提供的本机代码库实现。

  

那么谁为我们做这件肮脏的工作?一个神秘的线程?或者只是一个goroutine?

从Go 1.1开始,GC是并行的,因此必须在幕后进行某种多线程处理。 Goroutines是一种Go语言概念,很难想象你会在本机代码GC实现中“在线下”使用它们。 (但我可能错了......)

但是你还需要了解goroutines还需要多个线程。常见问题解答说:

  

“为什么我的多goroutine程序不使用多个CPU?

     

您必须设置GOMAXPROCS shell环境变量或使用运行时包的类似命名的函数,以允许运行时支持使用多个OS线程。“

请参阅?本机/操作系统线程涉及到底层。