AMPS:内存管理(二)

  对于底层的内存管理,AMPS提供了另外一种优化机制,一旦使用底层的内存分配函数(如C的malloc)为内存对象分配好一个大的buffer后,当这个内存对象销毁时,AMPS将这个本来要ree掉buffer存储在一个内部按内存块大小化分的free链表中,这样,当有新的内存对象需要分配时,AMPS先检查这个链表中是否有满足条件(即是否满足所申请的大小)的内存对象,如果有,从此链表中获取,从而避免了调用malloc,当这个内存对象使用完后,AMPS将这块内存回收又挂在链表上,从而避免了free操作。

  注意,这种机制使用AMPS持续不断地从向内部的free链表中增加底层分配的内存,在大负荷下有可能会使用内存耗尽,例如当大量的消息同时处理时。为了避免此现象,APMS提供了一个API用于内部内存的管理,这个API在free链表达到指定的大小时,释放一部分内存,这个指定大小取值为物理内存的一定比例。当然应用程序也可以能过限制并发的消息数目来避免内存耗尽,使用这种方式时需要应用程序注册一个AMPS的内部事件,当链表达到一定值时事件被触发,从而处理即可。

  在如下图5a中所示的内存管理对象,它包含了一个结点存储bufffer的链表,并且维护了包括buffer的大小、分配的总字节数、链表头指针,当前活动的buffer等。

  图5b显示了链表的一个结点,即一个buffer的内部结构,随着每次分配,指针向buffer的底端移动。

  图6显示了包含不同大小链表的buffer cache结构。


 AMPS:内存管理(二)_第1张图片

你可能感兴趣的:(AMPS:内存管理(二))