歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux系統Dalvik堆內存的管理與回收介紹

Linux系統Dalvik堆內存的管理與回收介紹

日期:2017/3/2 11:33:23   编辑:Linux技術

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

Linux系統Dalvik堆內存的管理與回收介紹

  Android系統啟動

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

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

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

  類似於JVM,Dalvik虛擬機也需要負責對堆內存中的對象進行管理工作,它使用的也是標記清除算法,但是細節上略有區別。 上一頁12下一頁共2頁

Copyright © Linux教程網 All Rights Reserved