新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式設備瀏覽器內存管理策略研究

基于嵌入式設備瀏覽器內存管理策略研究

作者: 時間:2011-07-22 來源:網絡 收藏

c.JPG


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

f.JPG

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

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


評論


相關推薦

技術專區(qū)

關閉