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

          新聞中心

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

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

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

          c.JPG


          (1)一:具有垃圾回收機制的可動態(tài)增長的池式分配。與傳統(tǒng)固定大小的池技術相比,在此引入了具有垃圾回收機制的可動態(tài)增長的池式分配,其數(shù)據(jù)結(jié)構(gòu)如圖3所示。由于會根據(jù)需要而動態(tài)增長,因此不用預測池的大?。挥捎诰哂欣厥諜C制,因此可以循環(huán)使用池內(nèi)空間。使用多種box對象,并經(jīng)常對它們進行分配和歸還,但典型的器會為每一個對象存儲一個header(表頭),對小對象而言這些headers可能會使程序的內(nèi)存需求加倍,此外,在一個共享的heap中分配和歸還小對象會帶來碎片風險,并因大量動態(tài)對象而增加時間。因此,對每種分配和歸還頻繁的box對象分別建立一個對象池,各種對象池形成一個poollinkedlist。一個對象池首先預先分配一個固定大小的arena并按對象大小對arena進行格式化,當用完arena的最后一個對象時,對當前的pool進行垃圾回收,把回收的空間放入這個pool的freelist當中,用戶可以重用freelist上的空間,如果垃圾回收后發(fā)現(xiàn)在這個pool中已經(jīng)沒有可用空間,則動態(tài)分配一個arena。從這種池式分配的過程來看,對arena的分配采用了動態(tài)分區(qū)方式,對arena中結(jié)構(gòu)對象的分配采用了固定分區(qū)方式。

          f.JPG

          從理論上分析,由于內(nèi)存管理器減少了存儲每一個對象需要的一個header(表頭)大小(在這里這個表頭是GCThing,GCThing由next指針、flagp指針組成),并且減少了碎片,池式分配能夠在較少內(nèi)存中存儲更多對象,減少系統(tǒng)的整體內(nèi)存需求。同時,通過一個具有垃圾回收機制的可動態(tài)增長的內(nèi)存池來容納一類小型結(jié)構(gòu)對象,使這些小型結(jié)構(gòu)對象在內(nèi)存中緊密排列,因而降低分頁系統(tǒng)中的paging頻率及其帶來的額外開銷。由于本方案實現(xiàn)的分配和歸還函數(shù)性能較好,因而提高了時間效率和實時響應能力。但是,對于每個arena,由于在最后剩余空間不能容納一個結(jié)構(gòu)對象的大小,那么這塊剩余空間就會成內(nèi)部碎片。當然,求出arena的合理大小會使內(nèi)部碎片減少到幾個字節(jié),甚至是沒有內(nèi)部碎片;特別是每個pool的最后一個arena,由于這個arena最有可能沒有放滿結(jié)構(gòu)對象,因此可能會有比較多的空間浪費。
          用戶從arena中分配走內(nèi)存空間,圖3中標有allocated space的區(qū)域(這塊區(qū)域由其上面的GCThing數(shù)據(jù)結(jié)構(gòu)進行管理,GCThing由next指針、flagp指針組成),當用戶用完這塊內(nèi)存空間,應用程序級的內(nèi)存管理應該如何重用它,以及在什么時候重用它。采用位圖與垃圾回收機制結(jié)合來重用在arena中已被用戶廢棄的內(nèi)存空間。在圖3中的FLAG SECTION其本質(zhì)上是一個bitmap,在FLAG SECTION中最小的單位是一個字節(jié)而不是一個位,在FLAG SECTION中每一個flag都與一個按存放結(jié)構(gòu)大小進行格式化后的內(nèi)存區(qū)域相對應,在圖3中用GCThing數(shù)據(jù)結(jié)構(gòu)中的flagp指針處理flag與其相對應的內(nèi)存區(qū)域之間相互掛鉤,用flag字節(jié)來表示其相對應的內(nèi)存區(qū)域是正在使用,還是用戶已經(jīng)廢棄,或是已經(jīng)被的內(nèi)存管理器回收。用戶通過的內(nèi)存管理器獲得一塊內(nèi)存區(qū)域,內(nèi)存管理器把相對應的flag置為正在使用;用戶通過內(nèi)存管理器釋放分配給它的內(nèi)存區(qū)域,內(nèi)存管理器把相對應的flag置為已經(jīng)廢棄;內(nèi)存管理器回收flag標志為已經(jīng)廢棄的內(nèi)存區(qū)域,把回收的內(nèi)存區(qū)域通過GCTh-ing數(shù)據(jù)結(jié)構(gòu)掛到以freeListHead為頭指針的空閑塊鏈表中,如圖3所示,從而達到了廢棄內(nèi)存區(qū)域的循環(huán)使用。

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


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();