安卓四種引用

bobo_liu發表於2019-04-03

前言

what、why、where、when、who、how。

開篇

將從5W1H進行講解。

要了解這方面的知識,得首先知道一下,其中的背景知識。 何為引用?

 Car car = new Car();
 
 Car car;
 car = new Car();
複製程式碼
Car car;
複製程式碼

這個是物件的宣告。 這個是儲存在棧區的。

new Car();
複製程式碼

這個是物件,放到了堆區。 把物件在堆區的地址,給到了物件的宣告。

why:

程式設計的時候,會用到記憶體。記憶體是固定的,大小就這麼多。不可能所有的記憶體都給一個程式來用,所以系統會分配給程式一段可用的記憶體。記憶體用瞭如果不回收的話,就會導致可用的記憶體越來越少,所以就會存在記憶體回收的問題。

在c或者c++之中,是由程式設計師自己來回收的,這個導致程式設計師在寫的時候戰戰兢兢的,稍有不慎就會出問題。

java中,提供了自動回收的機制,主要是針對堆區的記憶體進行回收。 那麼何時回收?回收哪些?誰來回收?怎麼回收?

系統當然希望記憶體永遠是夠的,為了達到這個目的,會進行回收。但是怎麼知道該回收哪些物件佔用的記憶體那?

所以有四種引用型別。

強引用StrongRefrence gc無論如何都不會回收這些物件,如果記憶體不夠用的話,就會丟擲記憶體溢位。

弱引用WeakRefrence 只要gc的掃描執行緒掃描到區域內有弱引用,就會將記憶體進行回收。

相關文章