Android面試之Java引用類型簡答

對於Java對象的引用,在面試的時候會在OutOfMemoryError錯誤時被問到。下面我們對Java的強引用、軟引用、弱引用、虛引用作簡單的瞭解。
  • 強引用(StrongReference)

    強引用是使用最普遍的引用。如果一個對象具有強引用,那垃圾回收器不會收回它。當內存空間不足,Java虛擬機寧願拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內存不足的情況。
    一句話,空間不回收。
    示例:

String s = new String("test");
System.out.println(s);
  • 軟引用(SoftReference)

    如果一個對象只具有軟引用,則內存空間足夠,垃圾回收器就不會收回它。如果內存空間不足了,就會回收這些對象的內存。只要垃圾回收器沒有回收它,該對象就可以被程序使用。
    一句話,空間不足就回收。
    示例:

String s = new String("test");
SoftReference<String> sr = new SoftReference<String>(s);
s = null;
System.out.println(sr.get());
  • 弱引用(WeakReference)

    弱引用跟軟引用的區別在於:只具有弱引用的對象擁有更短暫的生命週期。在垃圾回收器的線程掃描它所管轄的內存區域的過程中,一旦發現只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。
    一句話,看見就回收。
    示例:

String s = new String("test");
SoftReference<String> sr = new SoftReference<String>(s);
WeakReference<String> wr=new WeakReference<String>(s);
s = null;
sr.clear();
System.gc();
System.out.println(wf.get());
  • 虛引用(PhantomReference)

    虛引用可以用一個詞形容,就是形同虛設,與其他的幾種引用不同,虛引用並不會決定對象的生命週期。如果一個對象僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。
    一句話,任何時候回收。


紮實的基本助我們前行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章