Go 的垃圾收集实现
Go 是一种实现自动内存管理垃圾收集的语言。 Go 的初始版本使用保守的标记和清除收集器,但从那时起,实现已经发生了演变。
Go 1.1 到 1.3 GC 更新:
Go 1.4 GC 计划:
- 混合停止世界/并发收集器
- 三色标记- and-sweep 算法
- 非分代 and非压缩
Go 的垃圾收集特性:
-
标记和清除: 涉及标记静止的对象引用并清除未标记的对象。
-
非分代: 不根据对象年龄将堆划分为不同的代。
-
非压缩: 不移动内存中的活动对象。
-
完全精确: 准确跟踪对对象的所有引用,消除悬空指针的可能性。
-
Stop-the-world: 在垃圾回收期间暂停程序(在 Go 1.4 中),导致暂停。
-
低延迟:旨在减少垃圾期间的暂停时间
替换 Go GC 的注意事项:
替换 Go 的垃圾收集器是一个有争议的话题。需要考虑的一些因素包括:
-
分代 GC: 可能不会为较小的堆提供显着的性能改进。
-
不安全的包: 使实现完全精确和紧凑的垃圾收集器具有挑战性。
以上是Go 的垃圾收集是如何工作的,有什么权衡?的详细内容。更多信息请关注PHP中文网其他相关文章!