1. 程式人生 > 其它 >Java中的四大引用

Java中的四大引用

技術標籤:java

1.強引用

A a =new A();//此為強引用

任何強引用物件都不會被gc回收機制回收

2.軟引用SoftReference

  • 一般使用者實現Java物件的快取,快取可以有可以沒有,一般將有用但是非必須的物件用軟引用關聯
  • 只要是軟引用關聯的物件,在Java發生記憶體溢位異常之前,會將這些物件列入要回收的範圍,如果回收之後發現記憶體還是不夠,才會丟擲OOM異常
class MyArray{
    byte[]bytes=new byte[3*1024*1024];
}
public class TestDemo8 {
    public static void main
(String[] args) { //軟引用物件 //引用佇列 ReferenceQueue<MyArray> queue = new ReferenceQueue<>(); //建立一個軟引用物件 SoftReference<MyArray> softReference = new SoftReference<>(new MyArray(), queue); //獲取軟引用物件 System.out.println(softReference.get
()); //判斷是否被回收 System.out.println(softReference.isEnqueued()); System.gc(); System.out.println(softReference.get()); System.out.println(softReference.isEnqueued()); } }

此時執行的到結果:
在這裡插入圖片描述
此時由於並沒有修改記憶體,故返回為false。

修改記憶體後,再增加一個3M的陣列,此時執行結果如下:在這裡插入圖片描述
此時可以得到返回為true,證明前者被垃圾回收。

3.弱引用 WeakReference

  • 弱引用是用來一些非必須的物件,比軟引用更弱一些
  • 只要是被弱引用關聯的物件,只能夠生存到下一次垃圾回收之前,一旦發生垃圾回收,無論當前記憶體是否夠用,都會回收掉被弱飲用關聯的物件
class Test{

}
public class TestDemo8 {
    public static void main(String[] args) {
        //弱引用物件
        ReferenceQueue<Test> queue  = new ReferenceQueue<>();
        WeakReference<Test> weakReference = new WeakReference<>(new Test(), queue);

        System.out.println(weakReference.get());
        //判斷是否被回收
        System.out.println(weakReference.isEnqueued());

        System.gc();

        System.out.println(weakReference.get());
        System.out.println(weakReference.isEnqueued());
    }
}

執行結果:
在這裡插入圖片描述
只能存活在下次垃圾回收之前。

4.虛引用 PhantomReference

  • 別名幽靈引用,最弱的引用關係,一個物件是否具有虛引用的存在,完全是不會對其生命週期產生影響,也無法通過虛引用獲取一個物件的例項,它存在的唯一目的就是在物件被垃圾回收之後收到一個系統通知。