AMPS:内存管理(二)
来源:互联网 发布:华大基因ipo数据造假 编辑:程序博客网 时间:2024/04/29 13:04
对于底层的内存管理,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:内存管理(二)
- AMPS:内存管理(一)
- AMPS:内存管理模块源码解读(二)
- AMPS:内存管理模块源码解读(一)
- AMPS:事件管理
- AMPS:定时器管理
- 内存管理(二)
- 内存管理(二)
- 内存管理(二)
- 内存管理(二)
- C#内存管理(二)
- WinCE内存管理(二)
- iOS:内存管理(二)
- 操作系统 内存管理(二)
- STL内存管理(二)
- 90,内存管理(二)
- IOs内存管理(二)
- java内存管理(二)
- 委屈委屈
- 理科与工科的区别
- AFNetworking的学习
- 【VNC】YCrCb - YUV - RGB
- OGNL表达式
- AMPS:内存管理(二)
- 如何制作自己的android升级包(update.zip)
- 在源Exchange Mailbox 服务器宕机的情况下将用户帐号的属性变更!
- Windows Phone Pivot 模拟 滑动Image Viewer 出现 0x8000ffff 异常
- HTML5音频播放器资源免费下载
- Core Java (二) Java的基本结构与数据类型
- CentOS 安装 hadoop(伪分布模式)
- JAVA抽象类 接口 final 类与类的关系
- Publishing FSG reports using XML Publisher