1. 程式人生 > >Android 強引用、軟引用、弱引用、虛引用

Android 強引用、軟引用、弱引用、虛引用

1、強引用(StrongReference)
   

      強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。如下:

?
1 Object o=new Object();   //  強引用

當記憶體空間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足的問題。如果不使用時,要通過如下方式來弱化引用,如下:

?
1 o=null;     
// 幫助垃圾收集器回收此物件

  顯式地設定o為null,或超出物件的生命週期範圍,則gc認為該物件不存在引用,這時就可以回收這個物件。具體什麼時候收集這要取決於gc的演算法。

舉例:

?
1 2 3 4 public void test(){ Object o=new Object(); // 省略其他操作 }

在一個方法的內部有一個強引用,這個引用儲存在棧中,而真正的引用內容(Object)儲存在堆中。當這個方法執行完成後就會退出方法棧,則引用內容的引用不存在,這個Object會被回收。

但是如果這個o是全域性的變數時,就需要在不用這個物件時賦值為null,因為強引用不會被垃圾回收。

強引用在實際中有非常重要的用處,舉個ArrayList的實現原始碼:

?
1 2 3 4 5 6 7 8 private transient Object[] elementData; public void clear() { modCount++; // Let gc do its work for (int i = 0; i < size; i++) elementData[i] = 
null; size = 0; }

在ArrayList類中定義了一個私有的變數elementData陣列,在呼叫方法清空陣列時可以看到為每個陣列內容賦值為null。不同於elementData=null,強引用仍然存在,避免在後續呼叫 add()等方法新增元素時進行重新的記憶體分配。使用如clear()方法中釋放記憶體的方法對陣列中存放的引用型別特別適用,這樣就可以及時釋放記憶體。

2、軟引用(SoftReference)

        如果一個物件只具有軟引用,則記憶體空間足夠,垃圾回收器就不會回收它;如果記憶體空間不足了,就會回收這些物件的記憶體。只要垃圾回收器沒有回收它,該物件就可以被程式使用。軟引用可用來實現記憶體敏感的快取記憶體。

?

相關推薦

jvm引用例項分析(引用使用,引用引用

強引用(Strong Reference) 強引用是指在程式程式碼中普遍存在的,類似“Object obj=new Object()”這類的引用,只要強引用還存在,垃圾收集器永遠不會回收掉被引用的物件。 publicclass StrongReferenceTes

Android開發優化之的引用引用引用的使用

本文轉載至:http://www.jianshu.com/p/8488079a939b 引言 早在JDK1.2,Java就把物件的引用分為四種級別,從而使程式能更加靈活的控制物件的生命週期。這四種級別由高到低依次為:強引用、軟引用、弱引用和虛引用。 但是平時我們的程式碼中似乎很

android引用引用引用

強引用:直接引用一個物件軟引用:當記憶體不足&沒有其他地方引用時被gc回收。弱引用:無論記憶體是否充足,沒有其他地方引用時只要呼叫gc則被回收。ArrayList<String> list=new ArrayList<String>();

Android效能提升之引用引用引用引用使用

背景:收到公眾投稿,《從面試題中看Java的Reference(引用)》,分析的很不錯,總感覺少了實際的例子和應用場景。於是結合自己工作中場景,小總結一下。看下Agenda如下: 強引用 軟引用 弱引用 什麼時候使用軟引用,什麼時候使用弱引用? 虛引用 一、強引用

Android 引用引用引用引用

1、強引用(StrongReference)           強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。如下: ? 1 Object o=new Object();  

android的四種物件引用級別:引用

android中的強引用,弱引用,軟引用,虛引用。代表了android中的物件引用級別,也即代表了java的垃圾回收機制,看可以簡單理解為記憶體釋放。 1、強引用:強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。當記憶體空間不足,Java虛擬機器

Android 引用

  1.Android引用之強引用(StrongReference)。       啥是強引用?舉個例子,我們平時new 的物件,就都是強引用。如: String s =new String(),這就是一個強引用,那麼強引用有啥特點呢? 強引用物件,也就是new 出來的那

android中四大引用的區別,引用引用引用引用

強引用:使用的內容不可被回收,直到出現out of memory錯誤,android中沒有任何關鍵字指定這種強引用。 軟引用:         如果一個物件只具有軟引用,那麼如果記憶體空間足夠,垃圾回收器就不會回收它;如果記憶體空間不足了,就會回收這些物件的記憶體。只要垃圾

引用引用引用引用

enc 存在 bject 永遠 足夠 列表 設置 系統通知 內存溢出 概念我們希望能描述這樣一類對象:在內存空間還足夠時,則能保留在內存之中;如果內存空間在進行垃圾收集後還是非常緊張,則可以拋棄這些對象。在JDK 1.2之後,Java對引用的概念進行了擴充,將引用分為強引用

java 談談引用引用(Strong Reference)引用(Soft Reference)引用(Weak Reference)引用(Phantom Reference))

內存 enc ID 足夠 phantom 強引用 進行 溢出 tom 簡單談談引用(摘自java虛擬機第二版 ) 署名:wander 一、四種引用   在JDK 1.2之後,Java對引用的概念進行了擴充,將引用分為強引用(Strong Reference)、軟

Java基礎篇 - 引用引用引用引用

splay 查看 tla 之前 for 應用 幹貨 程序 策略 前言 Java執行GC判斷對象是否存活有兩種方式其中一種是引用計數。 引用計數:Java堆中每一個對象都有一個引用計數屬性,引用每新增1次計數加1,引用每釋放1次計數減1。 在JDK 1.2以前的版本中,若

【Java核心技術】引用引用引用幻象引用有什麼區別

在Java語言中,除了基本資料型別外,其他的都是指向各類物件的物件引用;Java中根據其生命週期的長短,將引用分為4類。 1 強引用 特點:我們平常典型編碼Object obj = new Object()中的obj就是強引用。通過關鍵字new建立的物件所關聯的引用就是強引用。 當JVM記憶體空

引用引用引用幻象引用的區別

不同的引用型別,主要體現的是物件不同的可達性狀態和對垃圾手機的影響。 強引用,就是我們最常見的普通物件y引用,只要還有強引用指向一個物件,就能表明物件還“活著”,垃圾收集器就不會碰這種物件。對於一個普通的物件,如果沒有其他的引用關係,只要超過了引用的作用域或者顯示地將相應(強)引用賦值為null

Java中的四種引用型別(

為什麼需要不同的引用型別 從Java1.2開始,JVM開發團隊發現,單一的強引用型別,無法很好的管理物件在JVM裡面的生命週期,垃圾回收策略過於簡單,無法適用絕大多數場景。為了更好的管理物件的記憶體,更好的進行垃圾回收,JVM團隊擴充套件了引用型別,從最早的強引用型別增加到強、軟、弱、虛四個引用

java的引用引用引用幻象引用引用佇列總結

java的強引用、軟引用、弱引用、幻象引用,引用佇列總結 java除了原始資料型別的變數,其他所有都是引用型別。 引用分為強引用、軟引用、弱引用、幻象引用,這幾種引用影響著物件的回收 強引用 強引用:形如Object object = new Object();這樣就是典型的強引用,

Java 引用引用引用引用

參考來源:http://www.cnblogs.com/dolphin0520/p/3784171.html  感謝原作者的分享!!! 以下內容是本人在看完之後按照自己的理解複述的,僅作為學習記錄,欲知詳解請點選上面的網址。 1.強引用 示例:Object object=new

JAVA基礎:引用引用引用引用

生活 任何傻瓜都能寫出計算機可以理解的程式碼。好的程式設計師能寫出人能讀懂的程式碼。 前言 在JAVA中,開發人員不需要像C開發人員那樣手動去管理記憶體中物件的生命週期,但是如果需要某些物件具備一定的生命週期(當記憶體不足的時候可以回收一些沒有必要的物件,從而規避一些OOM的風險

Java中的引用引用引用引用

在讀ThreadLocal原始碼的時候遇到了WeakReference,然後就仔細學習引用方面的知識,現在轉載一篇部落格。。 一.瞭解 強引用、軟引用、弱引用、虛引用的概念 在Java中,雖然不需要程式設計師手動去管理物件的生命週期,但是如果希望某些物件具備一定

Java引用引用引用引用深入探討

強引用、軟引用、弱引用和虛引用深入探討 為了更靈活的控制物件的生命週期,在JDK1.2之後,引用被劃分為強引用、軟引用、弱引用、虛引用四種類型,每種型別有不同的生命週期,它們不同的地方就在於垃圾回收器對待它們會使用不同的處理方式。 引用型別在日常開發中並不常關注,也很少注意到,因此很多人忽略了它們的存在,

Java之"引用引用引用"

思考:Java中為何會有引用的概念? 思路:在Java裡,當一個物件M被建立的時候,它就被放在heap裡。當GC執行時,如果發現沒有任何引用指向物件M,M就會被回收,用以騰出記憶體空間。 總結:如果一個物件被回收,需要滿足兩個條件: 沒有任何引用指向它 觸發GC(