go语言对象存储 golang数据存储( 四 )


通过上面的源码也可以看到中间部件central自身扩容操作与大对象内存分配差不多类似 。
在golang中将长度小于16bytes的对象称为微小对象(tiny) , 最常见的就是小字符串,一般会将这些微小对象组合起来 , 并用单块内存存储,这样能够有效的减少内存浪费 。
当微小对象需要分配空间span , 首先缓存部件会按指定的规格(tiny size class)取出一块内存,若容量不足,则重新提取一块;前面也提到会将微小对象进行组合,而这些组合的微小对象是不能包含指针的 , 因为垃圾回收的原因,一般都是当前存储单元里所有的微小对象都不可达时,才会将该块内存进行回收 。
而当从缓冲部件cache中获取空间span时,是通过偏移位置(tinyoffset)先来判断剩余空间是否满足需求 。若是可以的话则以此计算并返回内存地址;若是空间不足,则提取新的内存块,直接返回起始地址便可; 最后在对比新旧两块内存,空间大的那块则会被保留 。
关于go语言对象存储和golang数据存储的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读