首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁负责收集垃圾?

谁负责收集垃圾?
EN

Stack Overflow用户
提问于 2015-02-28 02:52:00
回答 1查看 1.2K关注 0票数 1

根据这个mark-and-sweep,go后面有一个规格说明垃圾收集机制。但是是谁干的呢?

  • Go代码将编译成本机二进制文件,对吗?因此,不会有像Java这样的虚拟机可以依赖。那么这肮脏的工作是谁为我们做的?神秘的线索?还是只吃一只猩猩?
  • 垃圾收集过程stop-the-world会像一个完整的Java GC吗?有谁能分辨出Java和Go之间GC机制的区别?我很少在网上找到资料。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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线程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28777573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档