1. 程式人生 > >Java物件的強、軟、弱和虛引用

Java物件的強、軟、弱和虛引用

⑴強引用(StrongReference)

強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。當記憶體空間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足的問題。

⑵軟引用(SoftReference)

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

軟引用可以和一個引用佇列(ReferenceQueue)聯合使用,如果軟引用所引用的物件被垃圾回收器回收,Java虛擬機器就會把這個軟引用加入到與之關聯的引用佇列中。

⑶弱引用(WeakReference)

弱引用與軟引用的區別在於:只具有弱引用的物件擁有更短暫的生命週期。在垃圾回收器執行緒掃描它所管轄的記憶體區域的過程中,一旦發現了只具有弱引用的物件,不管當前記憶體空間足夠與否,都會回收它的記憶體。不過,由於垃圾回收器是一個優先順序很低的執行緒,因此不一定會很快發現那些只具有弱引用的物件。

弱引用可以和一個引用佇列(ReferenceQueue)聯合使用,如果弱引用所引用的物件被垃圾回收,Java虛擬機器就會把這個弱引用加入到與之關聯的引用佇列中。

⑷虛引用(PhantomReference)

“虛引用”顧名思義,就是形同虛設,與其他幾種引用都不同,虛引用並不會決定物件的生命週期。如果一個物件僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。

虛引用主要用來跟蹤物件被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用佇列 (ReferenceQueue)聯合使用。當垃圾回收器準備回收一個物件時,如果發現它還有虛引用,就會在回收物件的記憶體之前,把這個虛引用加入到與之 關聯的引用佇列中。

http://blog.csdn.net/lyfi01/article/details/6415726

相關推薦

java中的引用(及利用引用實現快取記憶體)

在java中引用的型別一共有四種,分別是:強引用,軟引用,弱引用和虛引用。 那麼他們各自的定義是什麼呢? 1.強引用(StrongReference): 強引用是使用最普通的應用。如果一個物件具有強引用,那麼gc絕不會回收它。當記憶體空間不足,java虛擬

Java物件引用原理+結合ReferenceQueue物件構造Java物件的快取記憶體器

轉自:http://blog.csdn.net/lyfi01/article/details/6415726 1.Java物件的強、軟、弱和虛引用 在JDK 1.2以前的版本中,若一個物件不被任何變數引用,那麼程式就無法再使用這個物件。也就是說,只有物件處於可觸及(re

Java物件引用

⑴強引用(StrongReference) 強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。當記憶體空間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足的問題。

Java引用及GC Root——記憶體優化(一)

你也可以檢視我的其他同類文章,也會讓你有一定的收貨! 記憶體優化 記憶體優化的兩個主要方向: 記憶體洩露:已經沒有使用的物件,GC Root 還對其保持強引用,導致GC無法回收。 記憶體抖動:頻繁的建立物件,導致 GC 頻率較高,導致應用的卡頓

java引用應用

   首先,我們看一個僱員資訊查詢系統的例項。我們將使用一個Java語言實現的僱員資訊查詢系統查詢儲存在磁碟檔案或者資料庫中的僱員人事檔案資訊。作為一個使用者,我們完全有可能需要回頭去檢視幾分鐘甚至幾秒鐘前檢視過的僱員檔案資訊(同樣,我們在瀏覽WEB頁面的時候也經常會使用“後退”按鈕)。這時我們通常會有兩種程

詳解Java物件引用的區別

你知道Java中引用有幾種寫法嗎?逃~     對於大部分的物件而言,程式裡會有一個引用變數來引用該物件,這是最常見的引用方法。除此之外,java.lang.ref包下還提供了3個類:SoftReference、WeakReference和PhantomRe

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

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

Java中的引用引用引用引用及其例項

在《深入理解Java虛擬機器(第二版)》3.2.3節:再談引用 中,介紹了Java中的幾種引用: 在JDK 1.2以前,Java中的引用的定義很傳統:如果reference型別的資料中儲存的數值代表的是另外一塊記憶體的起始地址,就稱這塊記憶體代表著一

Java引用型別有哪幾種:引用引用引用引用

Java雖然有記憶體管理機制,但仍應該警惕記憶體洩露的問題。例如物件池、快取中的過期物件都有可能引發記憶體洩露的問題。 從JDK1.2版本開始,加入了物件的幾種引用級別,從而使程式能夠更好的控制物件的生命週期,幫助開發者能夠更好的緩解和處理記憶體洩露的問題。 這幾種

Java中的四種引用型別(

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

java四種引用

           在JDK 1.2以前的版本中,物件處於可觸及(reachable)狀態,程式才能使用它。物件的引用分為4種級別由高到低依次為:強引用、軟引用、弱引用、虛引用。 1、強引用(

Java四種引用---的知識點總結

前言 1.本文屬於知識點總結篇,基本內容以概念+原始碼分析+流程圖為主. 2.本文大多數概念,屬於站在巨人肩膀上整合而成,為了自己更好的複習和大眾對於這塊知識的瞭解. 3.本人學識尚淺,對於文章中如果有描述有誤的地方,還請大家及時通知,然後博主及時

Java中四種引用

1. 強引用(StrongReference)  強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。當記憶體空間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足的問題。 2. 軟引用(SoftR

java中的四種引用

強引用:例如: Student stu = new Student();  只要有強引用存在,關聯的物件就不會被垃圾回收機制回收。 軟引用:在系統要發生記憶體溢位前,軟引用關聯的物件會被垃圾回收機制回收。 弱引用:被若引用關聯的物件,下次垃圾回收機制執行的時候,會被回收掉。

java物件引用引用引用引用

     眾所周知,java中是JVM負責記憶體的分配和回收,這是它的優點(使用方便,程式不用再像使用c那樣操心記憶體),但同時也是它的缺點(不夠靈活)。為了解決記憶體操作不靈活這個問題,可以採用軟引用等方法。      在JDK1.2以前的版本中,當一個物件不被任何變數引

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

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

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

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

Java物件引用,引用,引用,引用

前言 總所周知, java不同於c/c++,它不需要程式設計師自已來管理記憶體(分配,釋放記憶體),java 會自己來管理記憶體,比如銷燬某些不再被使用的物件。這些操作都是在一個後臺執行緒默默進行(Garbage Collector Thread),也就是垃圾收集器執行緒,根據jvm實現

引用(案例)

前言:如果只是想避免OutOfMemory異常的發生,則可以使用軟引用。如果對於應用的效能更在意,想盡快回收一些佔用記憶體比較大的物件,則可以使用弱引用。 1.強引用(StrongReference)   強引用就是指在程式程式碼之中普遍存在的,比如下面程式碼中的

引用引用引用處理

前言 之前在Android上使用 Handler 引起了記憶體洩漏。從而認識了弱引用、軟引用、虛引用。今天發現Kotlin 在Android 上Anko庫裡的async, uiThread 裡面居然做了在非同步執行過程中Activity銷燬了uiTh