Android中的引用

在JDK1.2以前的版本中,若一個對象不被任何變量引用,則程序就無法再使用這個對象。從JDK1.2版本開始,把對象的引用分爲4種級別,從而使程序能夠更加靈活的控制對象的生命週期。這4種級別由高到低依次爲Strong Reference(強引用)、Soft Reference(軟引用)、Weak Reference(弱引用)、Phantom Reference(虛引用)。

1. Strong Reference

一般情況下強引用是使用最普遍的引用,若內存中的對象具有強引用時,即使內存不足,寧可拋出異常OOM使程序終止,垃圾回收器也不會回收它;若內存中的對象不再有任何強引用時,則垃圾回收器開始考慮可能要對此內存進行垃圾回收。

2. Soft Reference

軟引用可用於實現內存敏感的高速緩存,也可以和一個引用隊列(ReferenceQueue)聯合使用。當一個對象只具有軟引用時,如果內存空間足夠,則垃圾回收器就不會回收它;如果內存空間不足,則垃圾回收器就會回收該對象的內存。如果軟引用所引用的對象被垃圾回收器回收,則Java虛擬機就會把這個軟引用加入到與之關聯的引用隊列中。

3. Weak Reference

與軟引用相比,弱引用具有更短暫的生命週期,在垃圾回收器線程掃描它所管轄的內存區域的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間是否足夠,都會回收它的內存。不過,由於垃圾回收器是一個優先級很低的線程,因此不一定會很快發現那些只具有弱引用的對象。

弱引用可以和一個引用隊列聯合使用,如果弱引用所引用的對象被垃圾回收,Java虛擬機就會把這個弱引用加入到與之關聯的引用隊列中。

4. Phantom Reference

顧名思義,虛引用就是形同虛設,主要用於跟蹤對象被垃圾回收器回收的活動。與其他幾種引用不同的是,虛引用並不會決定對象的生命週期,並且必須與引用隊列聯合使用。當垃圾回收器準備回收一個對象時,如果發現它還有虛引用,就會在回收對象的內存之前,把這個虛引用加入到與之關聯的引用隊列中。程序可以通過判斷引用隊列中是否已經加入了虛引用,來了解被引用的對象是否將要被垃圾回收。如果程序發現某個虛引用已經被加入到引用隊列,那麼就可以在所引用的對象的內存被回收前採取必要的行動。

在Android應用的開發中,爲了防止內存溢出,在處理一些佔用內存大而且聲明週期較長的對象時,可以儘量應用軟引用和虛引用。

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