GC 三色标记 https://zhuanlan.zhihu.com/p/334999060
内存管理
- 小对象:小于32KB
Tiny对象:1Byte 至 16 Byte 且不包含指针
其他对象:16Byte 至 32KB - 大对象:大于等于32KB
中心
- mcache mcentral mheap
流程
- 计算对象所需内存大小size
- 根据size到size class映射,计算出所需的size class
- 根据size class和对象是否包含指针计算出span class
- 获取该span class指向的span
mcache 中span class
- 包含指针对象
- 不包含指针对象的
mcentral span class
- nonempty:这个链表里的span,所有span都至少有1个空闲的对象空间。这些span是mcache释放span时加入到该链表的。
- empty:这个链表里的span,所有的span都不确定里面是否有空闲的对象空间。当一个span交给mcache的时候,就会加入到empty链表。
mheap的span管理
mheap里保存了两棵二叉排序树,按span的page数量进行排序:
- free:free中保存的span是空闲并且非垃圾回收的span。
- scav:scav中保存的是空闲并且已经垃圾回收的span。