Go 的精确 GC 是如何工作的?

Go 1.3 实现了一个精确的垃圾收集器。

它如何精确识别指针?


扬帆大鱼
浏览 202回答 1
1回答

喵喔喔

查看“对垃圾收集器的更改”,其机制似乎很简单:从 Go 1.3 开始,运行时假定指针类型的值包含指针,而其他值不包含。这个假设是堆栈扩展和垃圾收集的精确行为的基础。使用包 unsafe 将整数存储在指针类型值中的程序是非法的,如果运行时检测到该行为,将会崩溃。使用包 unsafe 将指针存储在整数类型值中的程序也是非法的,但在执行过程中更难诊断。这个reddit线程添加:基本上,GC 必须找出哪些对象是可访问的,为此它必须遵循堆栈上的指针指向它们指向的每个对象,然后遵循对象中的指针指向它们指向的每个对象,直到不再遇到新对象对象。GC 没有遇到的每个对象都是垃圾。问题在于它需要 GC 知道什么是指针:一个精确的 GC 有这些信息,保守的 GC 必须假设堆栈上的每个值都可能是一个指针,如果它与分配对象的地址相同。因此,conservate GC 往往会保留许多无法访问的对象,并且必须做更多的工作(遍历死对象图)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go