Golang的内存分配策略是什么样的呢?
1.每个线程有自己私有的span(span包含1到多个连续页,内存管理的基本单位)缓存,即cache——避免多线程申请内存时不断的加锁;
2.object: 将span按特定大小切分成多个小块,每个小块存储一个对象——span面向内存管理,object面向对象分配;
3.当某个线程内存不足时会向central对象申请,当线程释放内存时又会回收进central——因为central服务于多个线程,所以某个线程申请和释放内存时都需要先加锁;
4.当central的span不足时,向heap对象申请——每种object对应一个central, 这个central集合存放于heap中, heap管理着全部内存;
5.当heap内存不足时,向操作系统申请新内存;定期扫描heap里长时间闲置的span,释放其占用的内存。