垃圾收集工作在哪里?

根据这个规范,在后面有一个标记和扫描垃圾收集机制。 但是谁呢?

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

  • 垃圾收集过程是否像Java的完整GC一样停止了世界 ? 任何人都可以说出Java和Go之间的GC机制的区别吗? 我可以在网上找到很少的材料。


  • 你的许多问题在这里得到解答:

  • Go使用哪种垃圾收集?
  • 对于其余的:

    但是谁呢?

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

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

    Go代码将编译为本机二进制文件,对吗?

    正确。 Go FAQ很清楚地说明了这一点。

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

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

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

    从Go 1.1开始,GC是平行的,所以必须在幕后进行某种多线程。 Goroutines是Go语言的一个概念,很难想象你会在本地代码GC实现中使用它们。 (但我可能是错的...)

    但是你也需要明白,goroutines也需要引擎盖下的多个线程。 FAQ说:

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

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

    看到? 本机/操作系统线程涉及隐藏。

    链接地址: http://www.djcxy.com/p/27165.html

    上一篇: Who does the garbage collection work in go?

    下一篇: Does newLISP use garbage collection?