1.一种内存分配的方法,其特征在于,所述方法包括:
获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;
根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;
将影响因子最小的slab类选取为源slab类,将一段时间内换出数量最多的slab设置为目的slab;
将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab。
2.根据权利要求1所述的方法,其特征在于,所述根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子,包括:
其中,所述used_chunks表示所述特定slab类中已使用对象数量,所述request表示所述特定slab类中一段时间内的请求数量,所述total_chunks表示所述特定slab类中的对象总数。
3.根据权利要求1所述的方法,其特征在于,所述将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab,包括:
获取所述源slab类中空闲空间数量最大的slab;
清空所述源slab类中空闲空间数量最大的slab内存,并将清空后的内存回收后重分配到所述目的slab。
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述方法还包括:
将Memcached中已使用的空间和未使用的空间区别对待,将已使用的区域集中于slab前端,将未使用的区域集中于slab后端。
5.根据权利要求1至3任意一项所述的方法,其特征在于,所述方法还包括:
在每个slab类中的每个slab的前端设置有用于指定该slab的范围的三个指针,所述三个指针包括用于标识slab中第一个存储对象的指针slab_start、用于标识slab中最后一个存储对象的指针slab_end、用于标识slab中当前可用存储对象的指针cur_free。
6.一种内存分配的装置,其特征在于,所述装置包括:
获取模块,用于获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;
选择模块,用于根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;
选取模块,用于将影响因子最小的slab类选取为源slab类,将一段时间内换出数量最多的slab设置为目的slab;
分配模块,用于将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab。
7.根据权利要求6所述的装置,其特征在于,所述选择模块,包括:
其中,所述used_chunks表示所述特定slab类中已使用对象数量,所述request表示所述特定slab类中一段时间内的请求数量,所述total_chunks表示所述特定slab类中的对象总数。
8.根据权利要求6所述的装置,其特征在于,所述分配模块,用于:
获取所述源slab类中空闲空间数量最大的slab;
清空所述源slab类中空闲空间数量最大的slab内存,并将清空后的内存回收后重新分配到所述目的slab。
9.根据权利要求6至8任意一项所述的装置,其特征在于,所述装置还包括:
调整模块,用于将Memcached中已使用的空间和未使用的空间区别对待,将已使用的区域集中于slab前端,将未使用的区域集中于slab后端。
10.根据权利要求6至8任意一项所述的装置,其特征在于,所述装置还包括:
设置模块,用于在每个slab类中的每个slab的前端设置用于指定该slab的范围的三个指针,所述三个指针包括用于标识slab中第一个存储对象的指针slab_start、用于标识slab中最后一个存储对象的指针slab_end、用于标识slab中当前可用存储对象的指针cur_free。