Go语言中的垃圾回收器使用了一种称为"MMSpan"的数据结构来管理堆内存的分配和回收。
MMSpan是由一系列内存页组成的,每个内存页的大小通常为8KB。它的主要作用是将堆内存划分为固定大小的块,这些块可以被分配给对象使用。MMSpan还负责跟踪已分配和未分配的块,并在需要时进行分配或回收。
MMSpan使用了一种称为"Span"的数据结构来表示一组连续的内存页。Span中包含了一些元数据信息,例如已分配和未分配的块数量,以及指向内存页的指针。
垃圾回收器使用Span来管理堆内存的分配和回收过程。当需要分配内存时,垃圾回收器会从合适大小的Span中获取未分配的块来满足分配请求。而当某个对象不再被引用时,垃圾回收器会将其所占用的块标记为未分配,并在需要时将这些未使用的块重新分配给其他对象使用。
通过使用Span算法,Go语言的垃圾回收器能够高效地管理堆内存的分配和回收,提供自动化的内存管理机制,极大的减少了使用者的负担。