根据这个specification,go后面有一个标记 - 扫描垃圾收集机制。但谁做到了?
Go代码将编译为原生二进制文件,对吧?因此,不会有像Java这样可以依赖的虚拟机。那么谁为我们做了肮脏的工作?一个神秘的线程?或者只是一个goroutine?
垃圾收集程序停止世界会像Java的完整GC吗?任何人都能说出Java和Go之间GC机制的区别吗?我很难在网上找到材料。
答案 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线程。“
请参阅?本机/操作系统线程涉及到底层。