切片扩容
容量
如果期望的容量是当前容量的两倍则使用期望容量
如果期望容量小于1024则扩容到当前容量的2倍
如果期望容量大于1024则扩容当前容量的25%直到满足当前容量需求
出触发条
只有添加新元素后的cap不满足时才会触发扩容, 扩容后返回一个新的slice结构体
处理方式
slice=append(slice, one)
扩容后新的slice结构体赋给原slice
append(slice, one)
则返回一个新slice
hash扩容
初始化
当map中的桶的数量多于24时才会有溢出桶的存在,数量为2^B-4个,B为正常桶的数量
hash桶最多存储8个对象,如果超出则需要存储在溢出桶
触发条件
hash装载因子大于6.5
溢出桶使用的太多,具体有个算法衡量
扩容方式
等量扩容,这种扩容是由于有大量写入和删除操作,导致溢出桶爆表,不断积累会造成内存泄漏,这种等量扩容,清除老的溢出桶并释放内存
翻倍扩容,这种由于装载因子过大触发,首先在写入或者删除操作时触发,创建一个2倍容量的桶,并把原有桶的数据赋值给oldBuckets, 并后续的写入和删除操作逐渐完成数据迁移。扩容期间会使用旧桶。