1. 程式人生 > >android的四種物件引用級別:強、弱、軟、虛引用

android的四種物件引用級別:強、弱、軟、虛引用

android中的強引用,弱引用,軟引用,虛引用。代表了android中的物件引用級別,也即代表了java的垃圾回收機制,看可以簡單理解為記憶體釋放。

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

2、如果一個物件只具有軟引用,則記憶體空間足夠,垃圾回收器就不會回收它;如果記憶體空間不足了,就會回收這些物件的記憶體。軟引用可以和一個引用佇列(ReferenceQueue)聯合使用,如果軟引用所引用的物件被垃圾回收器回收,

Java虛擬機器就會把這個軟引用加入到與之關聯的引用佇列中。

另外軟引用可以用來實現記憶體敏感的快取記憶體。詳見http://zhangjunhd.blog.51cto.com/113473/53092/;

3、弱引用即比軟引用的級別更低,一旦垃圾回收機發現弱引用,不會考慮當前的記憶體,立即釋放該物件的引用,但是垃圾回收機的執行緒級別更低,不容易發現弱引用。

4、

虛引用顧名思義,就是形同虛設,與其他幾種引用都不同,虛引用並不會決定物件的生命週期。如果一個物件僅持有虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。 虛引用主要用來跟蹤物件被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區別在於:虛引用必須和引用佇列
ReferenceQueue)聯合使用。當垃圾回收器準備回收一個物件時,如果發現它還有虛引用,就會在回收物件的記憶體之前,把這個虛引用加入到與之 關聯的引用佇列中。
ReferenceQueue queue = new ReferenceQueue (); PhantomReference pr = new PhantomReference (objectqueue);
程式可以通過判斷引用佇列中是否已經加入了虛引用,來了解被引用的物件是否將要被垃圾回收。如果程式發現某個虛引用已經被加入到引用佇列,那麼就可以在所引用的物件的記憶體被回收之前採取必要的行動。 主要參考:http://zhangjunhd.blog.51cto.com/113473/53092/

相關推薦

引用回收時機

強引用 正常定義的物件引用。 回收條件:不在引用 弱引用(WeakReference) 可用來解決asynctask 記憶體洩漏的問題。在切換其他acitivty的時候,如果這個actiity已經destory了,就應該讓它回收。此時如果我們用弱引用的話,就能防止不能被回收。

android物件引用級別引用

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

Java物件引用型別軟弱

            JDK1.2之後,Java對引用的概念進行了擴充,將引用分為強引用(Strong Reference)、軟引用(Soft Reference)、弱引用(Weak Reference)、虛引用(Phantom Reference)。這四種物件引用強度依

引用型別引用引用引用引用

java中除了基本資料型別的變數(int、long等),剩下的都是引用型別的變數,一共有四種不同的引用型別。 一、強引用(Strong Reference) 強引用就是最常見的對某個物件的引用,如下程式碼變數o就是對所建立的Object物件的一個強引用。 Object

MySQL的事務隔離級別

CM cde 性能 包括 ODB evel copy 隔離性 abi 本文實驗的測試環境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事務的基本要素(ACID)   1、原子性(Atomicity):事務開始後所有操作,要麽全部做完,要麽全部不做

mysql MySQL的事務隔離級別

atom tab aci 多次 comm 開始 默認 zab 不同 一、事務的基本要素(ACID)   1、原子性(Atomicity):事務開始後所有操作,要麽全部做完,要麽全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發

MySQL的事務隔離級別【轉】

atom 實驗 sel nsis ali 一個 記錄 完整 環境 本文實驗的測試環境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事務的基本要素(ACID)   1、原子性(Atomicity):事務開始後所有操作,要麽全部做完,要麽全部不做,不

Android佈局方式

線性佈局 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orienta

C# 事務 事務隔離級別

http://www.zsythink.net/archives/1233 不同隔離級別的問題   髒讀(Dirty Read) 一個事務處理過程裡讀取了另一個未提交的事務中的資料 例子: 當一個

Android點選事件方法

Android四種點選事件方法 android中的按鈕點選事件,有四種: 1.內部類 2.匿名內部類 3.佈局資料夾定義Onclick屬性,並在activity中宣告方法 4.在主類中實現OncickListener介面,並在主類中實現未實現的方法 1、內部類 點

MySQL的事務隔離級別及詳解

測試環境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事務的基本要素(ACID)   1、原子性(Atomicity):事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。

android基本動畫效果使用

1.點選下載 上圖: 包括基礎的動畫 透明度、放大縮小、平移、旋轉、組合動畫、閃爍、彈跳動畫 1.透明度 final Animation alphaAniamtion = new AlphaAnimation(1.0f,0); alphaAniamtion

MySQL的事務隔離級別(轉載)

本文實驗的測試環境:Windows 10+cmd+MySQL5.6.36+InnoDB 一、事務的基本要素(ACID)   1、原子性(Atomicity):事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有

MySQL的事務隔離級別講解

MySQL的四種事務隔離級別 - 花弄影 - 部落格園 https://www.cnblogs.com/huanongying/p/7021555.html   MySQL的四種事務隔離級別   本文實驗的測試環境:Windows 10+cmd+MySQL5.

android啟動模式

1、總敘 1.1、在一個專案中會包括著多個Activity,系統中使用任務棧來儲存建立的Activity例項,任務棧是一種“後進先出”的棧結構。舉個栗子,若我們多次啟動同一個Activity。系統會建立多個例項依次放入任務棧中。當按back鍵返回時,每按一次,一個Activ

MySQL 事務隔離級別

一、事務的基本要素(ACID) 1、原子性(Atomicity):事務開始後所有操作,要麼全部完成,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態。也就是說事務是一個不可分割的整體。 2、一致性(Consistency):事務

MySQL 的事務隔離級別

MySQL資料庫提供了四種事務隔離級別: READ_UNCOMMITTED - 未提交讀 READ_COMMITTED - 提交讀 REPEATABLE_READ - 可重複讀 SERIALIZABLE - 序列讀 什麼是事務 事務指的是滿足 ACID 特性

MySQL的事務隔離級別簡介

本文實驗的測試環境:Windows 10+cmd+MySQL+InnoDB 一、事務的基本要素(ACID)   1、原子性(Atomicity):事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也

Android儲存方式

插入資料:通過insert(String table, StringnullColumnHack, ContentValues values)方法插入資料,其中引數含義分別為:     table: 目標表名     nullColumnHack: 指定表中的某列列名。因為在SQLite中,不允許不允

01揹包的解法詳解動態規劃,貪心法,回溯法,優先佇列式分支限界法(C語言編寫)

最近剛完成了演算法課程設計,題目是用多種解法解決01揹包問題,經過一番探索,終於成功的用四種方法完成了本次實驗,下面記錄分享一下成果: 首先解釋下什麼是01揹包問題:給定一組共n個物品,每種物品都有自己的重量wi, i=1~n和價值vi, i=1~n,在限定的總重量(揹包的