前言
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的掃描執行緒掃描到區域內有弱引用,就會將記憶體進行回收。