系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux系統(tǒng)Dalvik堆內(nèi)存管理與回收

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

時間:2015-09-09 14:26:20 作者:zhijie 來源:系統(tǒng)之家 1. 掃描二維碼隨時看資訊 2. 請使用手機瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20150909/57272.html 手機查看 評論

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

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

  Android系統(tǒng)啟動

  Android系統(tǒng)啟動后,會有一個Zygote進程創(chuàng)建第一個Dalvik虛擬機,它只維護了一個堆。以后啟動的所有應用程序進程是被Zygote進程fork出來的,并都持有一個自己的Dalvik虛擬機。在創(chuàng)建應用程序的過程中,Dalvik虛擬機采用COW策略復制Zygote進程的地址空間。

  COW策略:一開始的時候(未復制Zygote進程的地址空間的時候),應用程序進程和Zygote進程共享了同一個用來分配對象的堆。當Zygote進程或者應用程序進程對該堆進行寫操作時,內(nèi)核就會執(zhí)行真正的拷貝操作,使得Zygote進程和應用程序進程分別擁有自己的一份拷貝,這就是所謂的COW。因為copy是十分耗時的,所以必須盡量避免copy或者盡量少的copy。

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

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

標簽 Dalvik

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨特見解

立即評論

以上留言僅代表用戶個人觀點,不代表系統(tǒng)之家立場

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

掃碼關(guān)注
掃碼關(guān)注

掃碼關(guān)注 官方交流群 軟件收錄