微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于嵌入式设备浏览器内存管理策略研究

基于嵌入式设备浏览器内存管理策略研究

时间:07-22 来源:互联网 点击:

    如果对许多对象执行Compaction,那么整个Compaction过程是比较费时的,因此,什么时候执行Compaction将对一个应用程序的执行效率有着重大影响。原则是:在内存空间和可用索引能够满足分配的情况下,能不要Compaction就不要执行Compaction。因此建立了两个执行Compaction的触发点,一个触发点是当用完了预分配1 000个索引值时;另一个触发点是当没有可用内存空间用于分配时触发。结果,在许多情况下避开了Compaction过程。对于管理索引值问题,采用了如下简单算法:先取前50个索引值放到Index Buffer中,用完50个索引值以后,再取50个索引值放入Buffer中,直到预分配的1 000个索引值用完为止,这时执行Compaction,然后按顺序搜索对象表,如果对象表表项标志为可以重复利用,则把这个对象表表项的索引加入到Index Buffer之中,直到填满Index Buffer为止;如果1 000个索引值已经全部用完,则按100为单位动态增加索引值。在Vector中,存放对象表需要一些额外的空间,大量对象的Compaction会占用比较多的时间,从而降低时间效率。

    3 Browser内存管理的性能分析
    Browser分别调用自己应用程序级的内存管理的接口与系统级的内存管理的接口进行运行比较,结论是应用程序级的内存管理效率比系统级的内存管理效率要高,网页越大,体现出来的效率越高。
    3.1 池式分配内存使用情况
    对于Browse中各种固定大小的结构(这种结构称谓thing),分别用相对应的一个内存池(pool)进行管理,各个pool形成一条pool链,内存管理器在执行一段时间后会按照各个pool的调用频率高低对pool链进行排序,从而提高了查找pool的效率。用小网页、中等大小网页和大网页对pool链中的各个pool进行测试,得到如图5所示的结果。


    3.2执行Compaction前后Vector中的内存使用情况
    首先我们察看在打开网页的过程中在没有执行Compaction的情况下,Vector中的内存使用情况,如图6所示,由图可知,标志为蓝颜色区域是正在使用的内存空间,白颜色表示已经废弃不用的内存空间。在没有Compaction以前,已经废弃不用的区域占用了大量的内存空间,在执行Compaction以后,所有正在使用的区域都会整齐地排列在内存的高端,从而提高了内存的使用效率。

    3.3 内存总体使用情况及与调用系统内存管理接口性能的比较
    首先从系统堆中分配出4 MB的内存,然后对这4 MB的内存进行应用程序级的内存管理,为了测试应用程序级的内存管理的各项性能指标,使用小、中和大三种网页对总体内存使用情况进行了统计,并且做了与调用系统内存分配和释放接口进行性能比较。表1是实验网页文件大小以及性能占用数据表,图7是运行一个大网页的时候,所有内存池占用空间和Vec-tor所占用空间的比例图,图8是针对一段关键上下文,
    调用应用程序级的内存管理接口和调用系统级的内存管理接口对三种大小不一的网页在执行这段上下文的时候所用平均时间的比较。从图8中可以看出,网页越大,内存管理的性能越优于直接运用系统的内存管理。

     

    4 结语
    本文主要在对嵌入式操作系统μCLinux内存管理进行分析和小结的基础之上,根据Browser实际运行情况,提出了运行在嵌入式设备上浏览器的内存管理池式分批和Vector分配策略,并分析了这种策略的特点和性能。最后通过实验数据来分析并得出浏览器分别调用应用程序级的内存管理的接口与系统级的内存管理的接口进行运行比较,得出应用程序级的内存管理效率比系统级的内存管理效率要高。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top