内存管理
从该节起,我们主要研究Go内存管理模块。Go runtime的内存管理设计思想主要继承自tcmalloc,这决定了其内存管理无论是各方面都有着比较优秀的性能。
任何一门语言对内存的管理都是语言极其核心的模块,尤其是对类似go此种自带垃圾回收的语言。因为内存申请释放是程序中最频繁的操作,实现时要考虑性能和空间利用率的高效。
所有的从os申请内存或者向os释放内存代价较大。可取的做法是在用户态维护内存池,一次性向os申请较大块的内存,程序对象的申请和释放都在内存池内进行。
用户程序申请释放对象一般以object为单位,而object大小千变万化。这要求内存池在管理时必须进行合理的妥协:我们无法做到在内存池管理时维护如此细粒度的映射关系。可以忍受一定程度的内存浪费来换取实现的简洁性。
本章节我们将从“核心数据结构”、“内存分配算法”、“核心API实现”等小节来一步步地由浅入深地描述Go的内存管理机制。