明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

Linux系統(tǒng)Dalvik堆內(nèi)存的管理與回收介紹

[摘要]Linux系統(tǒng)Dalvik虛擬機(jī)中可以對(duì)Android進(jìn)行一些優(yōu)化處理,而對(duì)堆內(nèi)存的管理和回收是優(yōu)化系統(tǒng)的重要手段。本文就來(lái)介紹一下Linux系統(tǒng)Dalvik堆內(nèi)存的管理與回收。Android系統(tǒng)啟...

  Linux系統(tǒng)Dalvik虛擬機(jī)中可以對(duì)Android進(jìn)行一些優(yōu)化處理,而對(duì)堆內(nèi)存的管理和回收是優(yōu)化系統(tǒng)的重要手段。本文就來(lái)介紹一下Linux系統(tǒng)Dalvik堆內(nèi)存的管理與回收。

Linux系統(tǒng)Dalvik堆內(nèi)存的管理與回收介紹

  Android系統(tǒng)啟動(dòng)

  Android系統(tǒng)啟動(dòng)后,會(huì)有一個(gè)Zygote進(jìn)程創(chuàng)建第一個(gè)Dalvik虛擬機(jī),它只維護(hù)了一個(gè)堆。以后啟動(dòng)的所有應(yīng)用程序進(jìn)程是被Zygote進(jìn)程fork出來(lái)的,并都持有一個(gè)自己的Dalvik虛擬機(jī)。在創(chuàng)建應(yīng)用程序的過(guò)程中,Dalvik虛擬機(jī)采用COW策略復(fù)制Zygote進(jìn)程的地址空間。

  COW策略:一開(kāi)始的時(shí)候(未復(fù)制Zygote進(jìn)程的地址空間的時(shí)候),應(yīng)用程序進(jìn)程和Zygote進(jìn)程共享了同一個(gè)用來(lái)分配對(duì)象的堆。當(dāng)Zygote進(jìn)程或者應(yīng)用程序進(jìn)程對(duì)該堆進(jìn)行寫(xiě)操作時(shí),內(nèi)核就會(huì)執(zhí)行真正的拷貝操作,使得Zygote進(jìn)程和應(yīng)用程序進(jìn)程分別擁有自己的一份拷貝,這就是所謂的COW。因?yàn)閏opy是十分耗時(shí)的,所以必須盡量避免copy或者盡量少的copy。

  為了實(shí)現(xiàn)這個(gè)目的,當(dāng)創(chuàng)建第一個(gè)應(yīng)用程序進(jìn)程時(shí),會(huì)將已經(jīng)使用了的那部分堆內(nèi)存劃分為一部分,還沒(méi)有使用的堆內(nèi)存劃分為另外一部分。前者就稱為Zygote堆,后者就稱為Active堆。這樣只需把zygote堆中的內(nèi)容復(fù)制給應(yīng)用程序進(jìn)程就可以了。以后無(wú)論是Zygote進(jìn)程,還是應(yīng)用程序進(jìn)程,當(dāng)它們需要分配對(duì)象的時(shí)候,都在Active堆上進(jìn)行。這樣就可以使得Zygote堆盡可能少地被執(zhí)行寫(xiě)操作,因而就可以減少執(zhí)行寫(xiě)時(shí)拷貝的操作。在Zygote堆里面分配的對(duì)象其實(shí)主要就是Zygote進(jìn)程在啟動(dòng)過(guò)程中預(yù)加載的類、資源和對(duì)象了。這意味著這些預(yù)加載的類、資源和對(duì)象可以在Zygote進(jìn)程和應(yīng)用程序進(jìn)程中做到長(zhǎng)期共享。這樣既能減少拷貝操作,還能減少對(duì)內(nèi)存的需求。

  類似于JVM,Dalvik虛擬機(jī)也需要負(fù)責(zé)對(duì)堆內(nèi)存中的對(duì)象進(jìn)行管理工作,它使用的也是標(biāo)記清除算法,但是細(xì)節(jié)上略有區(qū)別。

Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng)