IGG:Android內存回收機制原理是什麼

面試官: IGG---Android內存回收機制原理是什麼

心理分析:面試官對性能優化很高,卡頓和內存回收又很高的要求,求職者在git

接下來,會問你他的原理 你是怎麼看。 它的優缺點。爲何比其餘的好。從原理層來解析。這纔是最難的。github

這篇文章 從原理層說明他們的區別
求職者: 若是看了這篇文章,應付下來基本沒有多大的問題面試

更多面試內容,面試專題,flutter視頻 全套,音視頻從0到高手開發。
關注GitHub:https://github.com/xiangjiana/Android-MS
免費獲取面試PDF合集算法

想要優化Android內存,一些必備的基礎知識是不能少的。因此在第一部分,咱們先從Application Framework、Dalvik/Art、Linux內核三個部分由淺入深來說解關於Androd內存相關的知識。性能優化

一丶Dalvik內存分配原理簡單說一說,年輕代與老年代的區別

Android Dalvik Heap

簡介:Android Dalvik Heap與原生Java同樣,將堆的內存空間分爲三個區域,Young Generation新生代,Old Generation年老代, Permanent Generation持久代。性能

對象分配過程:最近分配的對象會存放在新生代區域,新生代區域分爲eden區(伊甸園,聖經中指上帝爲亞當夏娃創造的生活樂園)、so區和s1區,s1和s0區也被稱爲from區和to區(合稱Survivor區),他們是兩塊大小相等而且能夠互換角色的空間,絕大多數狀況下,對象首先分配在eden區,在一次新生代回收後,若是對象還存活會進入s0或者s1區,以後每一次gc,存活的對象年齡都會相應增長,當達到必定年齡則會進入老年代,最後累積必定時間再移動到持久代區域。系統會根據內存中不一樣的內存數據類型分別執行不一樣的gc操做。優化

問題:GC發生的時候,全部的線程都是會被暫停的。執行GC所佔用的時間和它發生在哪個Generation也有關係,新生代中的每次GC操做時間是最短的,年老代其次,持久代最長。GC時會致使線程暫停、界面卡頓的問題在Android Art中獲得了優化。spa

二丶Dalvik虛擬機執行模式是什麼樣的

Dalvik垃圾回收過程:GC會去標記和查找全部可訪問到的活動對象,這個時候整個程序的線程就會掛起,而且虛擬機內部的全部線程也會同時掛起(左下圖) 。之因此要掛起全部線程是確保:全部程序沒有進行任何變動,與此同時GC會隱藏全部處理過的對象,最終確保標記了全部須要回收的對象後,GC纔會恢復全部線程,並釋放空間。線程

大內存對象分配:當發現須要給一個較大的對象(藍色方塊)分配空間時,發現可用空間仍是夠的,但沒有這麼大的連續空間供新對象使用,這個時候就不得不進行一次GC回收(紅色方塊,右下圖),爲大對象騰出較大而且連續的空間。這就是咱們在分配一個較大對象的時候很是容易引發丟幀和卡頓的緣由之一,因此Android5.0之前你們都認爲Android卡頓是由於Darvik虛擬機的效率低下致使的。3d

總結:Dalvik虛擬機的三個問題

  1. GC時掛起全部線程
  2. 大而連續的空間緊張
  3. 內存碎片化嚴重

三丶ART虛擬機的優化

GC過程:在ART中GC會要求程序在分配空間的時候標記自身的堆棧,這個過程很是短,不須要掛起全部程序的線程.這樣就節約了很大一部分時間去查找活動對象。

大內存對象分配:ART裏會有一個獨立的LOS供Bitmap使用,從而提升了GC的管理效率和總體性能.

內存碎片化在ART裏還會有一個moving collector來壓縮活動對象(綠色方塊),使得內存空間更加緊湊。

總結 :Google在ART裏對GC作了很是大的優化(更高效的回收算法),使ART內存分配的效率提升了10倍,GC的效率提升了2-3倍(可見原來效率有多低),不過主要仍是優化中斷和阻塞的時間,頻繁的GC仍是會致使卡頓。

四丶內存不優化會致使哪些問題?

  1. ​上面介紹了Android內存分配從應用層到Linux層的一些知識,因此我總結出上圖內存會致使的一些問題,可是上圖只是列出了一些常見狀況,先後並無絕對的因果關係,最後來講下內存抖動。
  2. 內存抖動:Memory Churn,內存抖動是由於在短期內大量的對象被建立又立刻被釋放。瞬間產生大量的對象會嚴重佔用內存區域,當達到閥值,剩餘空間不夠的時候,會觸發GC從而致使剛產生的對象又很快被回收。即便每次分配的對象佔用了不多的內存,可是他們疊加在一塊兒會增長Heap的壓力,從而觸發更多其餘類型的GC。這個操做有可能會影響到幀率,並使得用戶感知到性能問題。

更多面試內容,面試專題,flutter視頻 全套,音視頻從0到高手開發。
關注GitHub:https://github.com/xiangjiana/Android-MS
免費獲取面試PDF合集

相關文章
相關標籤/搜索