应用程序级的内存管理方法技术

技术编号:2831168 阅读:188 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开一种应用程序级的内存管理方法,包括对固定大小数据结构和可变大小数据结构的内存空间的管理,其管理方法包括:采用池式内存管理的方式管理固定大小数据结构的内存空间的分配和释放,采用垃圾回收机制回收固定大小数据结构内存空间的分配和释放过程中产生的内存碎片;采用矢量方式管理可变大小数据结构的内存空间的分配和释放,采用压缩机制回收可变大小数据结构内存空间的分配和释放过程中产生的内存碎片。通过本发明专利技术方案提高了内存分配和释放过程的管理效率,不会消耗尽系统的内存而导致死机;比系统的内存管理更加高效。

【技术实现步骤摘要】

本专利技术涉及内存管理技术,特别是指一种。
技术介绍
在嵌入式系统中,由于总的可用内存相对比较小,而浏览器(browser )的正常运行需要比较大的内存并且内存分配和释放频繁, 例如, 一张赏心悦目的网页中存在着各种长短不一的文字段、各种表单(Form)以及各种图片等等,通过几种矩形数据结构(box)来表示它 们。在排版过程中,随着上下文的改变,这几种矩形数据结构会进行频 繁的分配释放,例如把图片插入到网页的时候,网页会把一个局部区域 内的矩形数据结构释放然后重新生成,从内存管理角度来看,这导致了 频繁的内存分配和释放。为了保证浏览器的正常运行和减小内部碎片, 有必要对应用程序浏览器进行内存管理。
技术实现思路
有鉴于此,本专利技术提出一种,提高内存 分配和释^t过程的管理效率。基于上述目的本专利技术提供的一种,包括 对固定大小数据结构和可变大小数据结构的内存空间的管理,其管理方 法包括釆用池式内存管理的方式管理固定大小数据结构的内存空间的分配 和释放,采用垃圾回收机制回收固定大小数据结构内存空间的分配和释 放过程中产生的内存碎片;釆用矢量方式管理可变大小数据结构的内存空间的分配和释放,采 用压缩机制回收可变大小数据结构内存空间的分配和释放过程中产生的 内存碎片。该方法所述固定大小数据结构内存空间的分配过程包括为每种固 定大小的数据结构对象分别建立一个对象池,各种对象池组成一个池链 表(pool linked list);为所述固定大小的数据结构对象分配一个固定大 小的内存块(arena)并按对象大小对这内存块进行格式化。该方法所述对固定大小的内存块格式化后还包括将该固定大小的 数据结构对象的GCThing数据结构中的flagp指针指向对应的标志位, 并把该标志位设置为正在使用,将该对象可用空间的首地址返回给用 户,将对象池中freeListHead指针指向下一个对象可用空间的首地址。该方法所述分配过程前进一步包括判断当前分配是否为首次分 配,如果是,为这个矩形数据结构对象建立一个对象池头,并挂到池链 表中;如果不是则直接执行所述分配过程。该方法如果不是,则进一步查看是否存在一个可用对象空间,如果 有,将对象的GCThing数据结构中的flagp指针指向对应的标志位,并 把标志位置为正在使用;否则,对桂在该对象池中的所有内存块进行垃 圾回收。该方法所述固定大小数据结构内存空间的释放过程包括根据分配 时返回的首地址找到相应GCThing数据结构中的flagp指针,此指针指 向一个标志位,把这个标志位i殳为已经废弃不用。该方法所述固定大小数据结构为矩形数据结构。该方法所述垃圾回收过程为对挂在此对象池中的所有固定大小的内 存块进行垃圾回收,回收的可用对象通过链表的形式挂到freeListHead 指针下。该方法如果垃圾回收后发现在这个池中已经没有可用空间,则再动 态分配一个固定大小的内存块给这个池,其中每次分配的内存块大小都是固定的。该方法釆用位图与垃圾回收机制结合来重用在固定大小的内存块中 已被用户废弃的内存空间。该方法所述可变大小数据结构内存空间的分配和释放过程包括从索引緩存中取得一个索引值,并把此索引值放到将要分配给使用者的内 存的最后位置;设置矢量(Vector)数据结构中的各值,在其内记录了分配次数、 已分配内存的总大小和下一次分配的起始位置;设置对应的对象表结构中的各值,把其内的标志位置为正在使用, 地址置为当前可用地址,大小置为使用者请求分配内存的大小;返回索 引值给使用者。该方法所述采用压缩机制回收可变大小数据结构内存空间的分配和 释放过程中产生的内存碎片过程包括在对象表中检测各StrMap数据 结构的标志位是已经废弃不用还是正在使用,如果标志位是已经废弃不 用,那么更改这个标志位为已经回收并继续检测下一个StrMap数据结 构的标志位,直到找到一个标志位是正在使用的StrMap数据结构,然 后把这个StrMap数据结构对应的内存中的内容移到前面已经废弃不用 的内存中,并更改这个StrMap数据结构的成员变量addr的值为新 值,重复这个过程,直到把对象表中的所有StrMap数据结构检测完。从上面所述可以看出,本专利技术提出,采 用池式内存管理的方式管理固定大小数据结构的内存空间的分配和释 放,由于会根据需要而动态增长,因此不用预测内存池的大小;由于内 存管理器减少了存储每一个对象需要的一个表头大小,并且减少了碎 片,池式内存管理能够在较少内存中存储更多对象,减少系统的整体内 存需求。同时,通过一个具有垃圾回收机制的可动态增长的内存池来容 纳一类小型结构对象,使这些小型结构对象在内存中紧密排列,因而可 以循环使用池内空间,且降低分页系统中的分页频率及其带来的额外开 销。由于实现的分配和释放函数性能很好,因而提高了时间效率和实时 响应能力。采用矢量方式管理可变大小数据结构的内存空间的分配和释放,采 用压缩(Compaction)机制回收可变大小数据结构内存空间的分配和释 放过程中产生的内存碎片。利用具有压缩机制的矢量方式通过移动继 续在用对象来移除继续在用对象之间的已经废弃不用的对 象,从而把继续在用对象,,移成连续排列,而已经废弃不用的所 有对象所占用的空间解放出来放到地址空间的某一端,对它们进行循 环使用。减少了内存碎片,避免了内存空间的浪费。综上,通过本专利技术方案提高了内存分配和释放过程的管理效率,不会消耗尽系统的内存而导致死机;比系统的内存管理更加高效。 附图说明图1为本专利技术实施例浏览器内存管理各分区的布局;图2为本专利技术实施例具有垃圾回收机制的可动态增长的池式内存管 理的数据结构示意图3为本专利技术实施例矢量方式的数据结构示意图4为本专利技术实施例固定大小数据结构内存空间的分配和释》文的流 程示意图5为本专利技术实施例可变大小数据结构内存空间的分配和释放的流 程示意图。具体实施例方式下面参照附图对本专利技术进行更全面的描述,其中说明本专利技术的示例 性实施例。本专利技术是一种应用程序级的内存管理方案,内部提供了两套内存管 理机制,分别是采用池式内存管理(Pooled Memory Management)的方式来管理 固定大小数据结构的分配和释放,采用垃圾回收机制回收其内存碎片;采用矢量方式来管理可变大小数据结构的分配和释放,比如字符 串,采用压缩机制回收其内存碎片。下面结合具体实施例进行详细说明应用程序浏览器内存管理是在一块已分配的内存上进行再组织内存 的使用方式,它不会涉及操作系统的内存管理。首先从系统获得一块固定大小的内存,然后把这块内存按照功能进 行固定分区。参见图1所示,图1是浏览器内存管理各分区的布局,把从系统获得的内存分为四个区第一个区是静态区(Static Section),大小为20K,这个区主要包 括用于保存全局性数据结构(GlobalCtlVar )的全局变量区(Global Variables Section ) 、 50个字(word)大小的索引緩存(Indices Buffer )、池链表(Pool Linked List),另外预留了一些空闲区域(Free Area )。第二个区是字串映射区(String Map Section),是一个对象表,大 小为20K,用于存放数据结构StrMa本文档来自技高网...

【技术保护点】
一种应用程序级的内存管理方法,包括对固定大小数据结构和可变大小数据结构的内存空间的管理,其特征在于,包括:采用池式内存管理的方式管理固定大小数据结构的内存空间的分配和释放,采用垃圾回收机制回收固定大小数据结构内存空间的分配和释放过程 中产生的内存碎片;采用矢量方式管理可变大小数据结构的内存空间的分配和释放,采用压缩机制回收可变大小数据结构内存空间的分配和释放过程中产生的内存碎片。

【技术特征摘要】
1.一种应用程序级的内存管理方法,包括对固定大小数据结构和可变大小数据结构的内存空间的管理,其特征在于,包括采用池式内存管理的方式管理固定大小数据结构的内存空间的分配和释放,采用垃圾回收机制回收固定大小数据结构内存空间的分配和释放过程中产生的内存碎片;采用矢量方式管理可变大小数据结构的内存空间的分配和释放,采用压缩机制回收可变大小数据结构内存空间的分配和释放过程中产生的内存碎片。2. 根据权利要求l所述的方法,其特征在于,所述固定大小数据结 构内存空间的分配过程包括为每种固定大小的数据结构对象分别建立 一个对象池,各种对象池组成一个池链表;为所述固定大小的数据结构 对象分配一个固定大小的内存块并按对象大小对其进行格式化。3. 根据权利要求2所述的方法,其特征在于,所述对固定大小的内 存块格式化后还包括将该固定大小的数据结构对象的GCThing数据 结构中的flagp指针指向对应的标志位,并把该标志位设置为正在使 用,将该对象可用空间的首地址返回给用户,将对象池中freeListHead 指针指向下一个对象可用空间的首地址。4. 根据权利要求3所述的方法,其特征在于,所述分配过程前进一 步包括判断当前分配是否为首次分配,如果是,为这个矩形数据结构 对象建立一个对象池头,并挂到池链表中;如果不是则直接执行所述分 配过程。5. 根据权利要求4所述的方法,其特征在于,如果不是,则进一步 查看是否存在一个可用对象空间,如果有,将对象的GCThing数据结 构中的flagp指针指向对应的标志位,并把标志位置为正在使用;否 则,对挂在该对象池中的所有固定大小的内存块进行垃圾回收。6. 根据权利要求1所述的方法,其特征在于,所述固定大小数据结 构内存空间的释放过程包括根据分配时返回的首地址找到相应 GCThing数据结构中的flagp指针,此指针指向一个标志位,把这个标 ...

【专利技术属性】
技术研发人员:费华东胡世炜
申请(专利权)人:UT斯达康通讯有限公司
类型:发明
国别省市:86[中国|杭州]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1