【Go垃圾回收机制】0.垃圾回收概述

之前一直就记了点GMP架构,golang的gc机制一直没去了解,现在看了发现其实相当好理解,go确实是一门直截了当的语言。

什么是垃圾回收

Garbage Collection,简称GC,也就是垃圾回收,是一种自动内存管理的机制。当程序向操作系统申请的内存不再需要时,垃圾回收主动将其回收并供其他代码进行内存申请时候复用,或者将其归还给操作系统,这种针对内存级别资源的自动回收过程,即为垃圾回收。而负责垃圾回收的程序组件,即为垃圾回收器。

垃圾回收的几个概念

1. 根对象

根对象在垃圾回收的术语中又叫做根集合,它是垃圾回收器在标记过程时最先检查的对象,包括:

  • 全局变量:程序在编译期就能确定的那些存在于程序整个生命周期的变量。
  • 执行栈:每个 goroutine 都包含自己的执行栈,这些执行栈上包含栈上的变量及指向分配的堆内存区块的指针。
  • 寄存器:寄存器的值可能表示一个指针,参与计算的这些指针可能指向某些赋值器分配的堆内存区块。

2. STW

STW 可以是 Stop the World 的缩写,也可以是 Start the World 的缩写。通常意义上指指代从 Stop the World 这一动作发生时到 Start the World 这一动作发生时这一段时间间隔,即砸瓦鲁多万物静止。STW 在垃圾回收过程中为了保证实现的正确性、防止无止境的内存增长等问题而不可避免的需要停止赋值器进一步操作对象图的一段过程。在STW过程中整个用户代码被停止或者放缓执行, STW 越长,对用户代码造成的影响(例如延迟)就越大,所以垃圾回收算法的核心就是减少STW时间,减轻GC对程序的影响。

其他具体的内容详见 https://learnku.com/docs/go-interviews/9-la-ji-hui-shou-qi/16576
直接从go语言的GC机制开始写了,这章就不写那么多了。


【Go垃圾回收机制】0.垃圾回收概述
https://sheep-in-box.github.io/2024/07/25/【Go垃圾回收机制】0-垃圾回收概述/
作者
Sheep
发布于
2024年7月25日
许可协议