<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式設(shè)備瀏覽器內(nèi)存管理策略研究

          基于嵌入式設(shè)備瀏覽器內(nèi)存管理策略研究

          作者: 時(shí)間:2011-07-22 來源:網(wǎng)絡(luò) 收藏

          (2)二:具有Compaction機(jī)制的Vector分配。在Browser中,除了結(jié)構(gòu)大小固定的對(duì)象頻繁分配和歸還外,經(jīng)常有大量大小不同的對(duì)象分配和歸還,目前,這種現(xiàn)象主要出現(xiàn)在處理TextBox這一塊內(nèi)容上,這些大小不向的對(duì)象具有如下特點(diǎn):其一是對(duì)象的分配和歸還是隨機(jī)發(fā)生的;其二是對(duì)象可以在其生命過程中改變自身大小。如果直接利用系統(tǒng)函數(shù)進(jìn)行分配和釋放,在總比較小的系統(tǒng)中會(huì)造成過多的碎片,從而浪費(fèi)了大量空間。具有Compaction機(jī)制的Vector通過移動(dòng)“繼續(xù)在用對(duì)象”來移除“繼續(xù)在用對(duì)象”之間的“已經(jīng)廢棄不用的對(duì)象”,從而把“繼續(xù)在用對(duì)象”移成連續(xù)排列,而“已經(jīng)廢棄不用的所有對(duì)象”所占用的空間解放出來放到地址空間的某一端,對(duì)它們進(jìn)行循環(huán)使用,移動(dòng)對(duì)象,最富有挑戰(zhàn)的問題在于保證原來對(duì)空間的引用都被正確更新。當(dāng)某個(gè)對(duì)象移往一個(gè)新位置,所有指向原地址的指針都將失效。雖然技術(shù)上有可能找出每一個(gè)移動(dòng)對(duì)象的原有指針并更新之,但通常引入一個(gè)額外的間接層會(huì)使問題更簡(jiǎn)單:用戶引用的是指向?qū)ο蟊碇幸粋€(gè)項(xiàng)目欄內(nèi)對(duì)象的“handle”,而不再直接指向?qū)ο蟮刂罚?ldquo;handle”是指向某對(duì)象真實(shí)地址的“惟一”指針,對(duì)象表中一個(gè)項(xiàng)目欄內(nèi)有代表handle的addr、有表示對(duì)象所占空間的大小size和用于標(biāo)志對(duì)象所占空間是否為“繼續(xù)在用對(duì)象”還是“已經(jīng)廢棄不用的對(duì)象”的標(biāo)志位mark。圖4表示了對(duì)象引用、對(duì)象表和實(shí)際對(duì)象的三者關(guān)系。當(dāng)內(nèi)存中移動(dòng)“繼續(xù)在用對(duì)象”的時(shí)候,只需要更新對(duì)象表中相對(duì)應(yīng)項(xiàng)目欄中代表handle的addr,使它指向?qū)ο蟮男碌刂?,其他所有引用都可以繼續(xù)正確地訪問該對(duì)象。這里返回給用戶的引用是對(duì)象表的索引,用戶再通過索引獲得相對(duì)應(yīng)的handle指針addr,為了使用戶快速獲取可用索引,建立了50個(gè)可用索引的buffer。

          本文引用地址:http://www.ex-cimer.com/article/150448.htm

          a.jpg


          如果對(duì)許多對(duì)象執(zhí)行Compaction,那么整個(gè)Compaction過程是比較費(fèi)時(shí)的,因此,什么時(shí)候執(zhí)行Compaction將對(duì)一個(gè)應(yīng)用程序的執(zhí)行效率有著重大影響。原則是:在內(nèi)存空間和可用索引能夠滿足分配的情況下,能不要Compaction就不要執(zhí)行Compaction。因此建立了兩個(gè)執(zhí)行Compaction的觸發(fā)點(diǎn),一個(gè)觸發(fā)點(diǎn)是當(dāng)用完了預(yù)分配1 000個(gè)索引值時(shí);另一個(gè)觸發(fā)點(diǎn)是當(dāng)沒有可用內(nèi)存空間用于分配時(shí)觸發(fā)。結(jié)果,在許多情況下避開了Compaction過程。對(duì)于索引值問題,采用了如下簡(jiǎn)單算法:先取前50個(gè)索引值放到Index Buffer中,用完50個(gè)索引值以后,再取50個(gè)索引值放入Buffer中,直到預(yù)分配的1 000個(gè)索引值用完為止,這時(shí)執(zhí)行Compaction,然后按順序搜索對(duì)象表,如果對(duì)象表表項(xiàng)標(biāo)志為可以重復(fù)利用,則把這個(gè)對(duì)象表表項(xiàng)的索引加入到Index Buffer之中,直到填滿Index Buffer為止;如果1 000個(gè)索引值已經(jīng)全部用完,則按100為單位動(dòng)態(tài)增加索引值。在Vector中,存放對(duì)象表需要一些額外的空間,大量對(duì)象的Compaction會(huì)占用比較多的時(shí)間,從而降低時(shí)間效率。

          3 Browser內(nèi)存的性能分析
          Browser分別調(diào)用自己應(yīng)用程序級(jí)的內(nèi)存管理的接口與系統(tǒng)級(jí)的內(nèi)存管理的接口進(jìn)行運(yùn)行比較,結(jié)論是應(yīng)用程序級(jí)的內(nèi)存管理效率比系統(tǒng)級(jí)的內(nèi)存管理效率要高,網(wǎng)頁越大,體現(xiàn)出來的效率越高。
          3.1 池式分配內(nèi)存使用情況
          對(duì)于Browse中各種固定大小的結(jié)構(gòu)(這種結(jié)構(gòu)稱謂thing),分別用相對(duì)應(yīng)的一個(gè)內(nèi)存池(pool)進(jìn)行管理,各個(gè)pool形成一條pool鏈,內(nèi)存管理器在執(zhí)行一段時(shí)間后會(huì)按照各個(gè)pool的調(diào)用頻率高低對(duì)pool鏈進(jìn)行排序,從而提高了查找pool的效率。用小網(wǎng)頁、中等大小網(wǎng)頁和大網(wǎng)頁對(duì)pool鏈中的各個(gè)pool進(jìn)行測(cè)試,得到如圖5所示的結(jié)果。

          d.JPG

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();