1.強引用:
通常我們使用new操作符創建一個對象時所返回的引用即為強引用。強引用即使當前的內存不足也不會被回收而是由JVM拋出OutOfMemoryError 錯誤。如果想要中斷強引用和某個對象之間的關聯,可以顯式地將引用賦值為null,這樣一來的話,JVM在合適的時間就會回收該對象。
String str = "hello"; // 強引用 str = null; // 取消強引用
2.軟引用
內存空間足夠的時候則正常使用,內存空間不足的時候則會被垃圾回收器回收。可用於圖片緩存中,內存不足時系統會自動回收不再使用的Bitmap
SoftReference<String> softName = new SoftReference<>("張三");
3.弱引用
每當JVM進行垃圾回收的時候不管內存空間是否充足都會將弱引用回收。不過由於垃圾回收器是一個優先級較低的線程,所以並不一定能迅速發現弱引用對象。同樣可用於圖片緩存中,這時候只要Bitmap不再使用就會被回收
WeakReference<String> weakName = new WeakReference<String>("hello");
4.虛引用
虛引用是Java中最“弱”的引用,在任何時候都可能被垃圾回收器回收。通過它甚至無法獲取被引用的對象,它存在的唯一作用就是當它指向的對象回收時,它本身會被加入到引用隊列中,這樣我們可以知道它指向的對象何時被銷毀。
ReferenceQueue<String> queue = new ReferenceQueue<String>(); PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);