Android與OS記憶體回收機制區別
iOS的記憶體回收機制
IOS採用引用計數演算法回收記憶體,當物件引用計數為0時,物件會執行反初始化方法並被回收。如果兩個物件互相引用對方,就會造成迴圈強引用,導致記憶體洩漏。
Android記憶體回收機制
Android採用的是根搜尋演算法回收記憶體,該演算法通過GC Roots作為起點搜尋,搜尋通過的路徑稱為引用鏈,當一個物件沒有被GC Roots的引用鏈連線的時候,這個物件就會被回收。即使A和B兩個物件互相引用對方,只要A和B都不在引用鏈上,這兩個物件都會被回收。
下圖中的每個圓節點代表物件,箭頭代表可達路徑,當圓節點與 GC Roots 存在可達路徑時,表示無法回收(黃色圓節點),反之則可以回收(藍色圓節點)。

GC Root
- 虛擬機器棧(棧幀中的區域性變數)中的引用的物件。
- 方法區域中的類靜態屬性引用的物件。
- 方法區域中常量引用的物件。
- 本地方法棧中 JNI(Native 方法)的引用的物件。
- 執行中執行緒引用的物件