什麼是java四大引用?

千鋒武漢發表於2021-07-22

  相信現在有很多人正在學習java程式語言,其中java的四大引用相信很多同學都不是非常熟悉,那麼什麼是java四大引用?來看看下面的詳細介紹。

  什麼是java四大引用?是JDK1.2版本開始引入,把物件的引用分為4個等級,我們平時學習的就是四種的第一級的強引用,說白了,就Object o = new Object(),四個引用分別是強引用、軟引用、弱引用和虛引用,請記住它們的順序!因為這是它們對記憶體的敏感程度!

java

  等級: 強 > 軟 > 弱 > 虛

  它們有什麼作用?

  ·靈活的控制物件的生命週期

  ·提高物件的回收機率

  理論加程式碼分析:

   1、什麼是強引用?

  強引用就是我們平時使用的物件方式,也是使用最多的一種方式,請記住不管記憶體緊張也罷,不足也罷,gc永不回收強引用的物件, 即使jvm 出現(記憶體溢位錯誤)OutOfMemoryError,使程式停止,也不會回收物件來提高記憶體

  程式碼

  public class StrongReferenceDemo {

  public static void main(String[] args) {

  Integer data = new Integer(4);

  String str = "123";

  Student student = new Student();

  //以上三個物件都是強引用物件,指我們平時使用的物件方式

  }

  }

  class Student {

  }

   2. 什麼是軟引用?

  物件具備軟引用,請記住,只要記憶體足夠,我們不對物件回收,但是當記憶體不足,gc對軟引用物件進行回收可以看出軟引用對記憶體很敏感,可用來快取記憶體,同時它可以結合佇列使用,如果軟引用被gc回收,jvm就會把軟引用加入到佇列中。

  程式碼

  public class Demo {

  public static void main(String[] args) {

  String ss = "hello";

  //這時"hello"有一個強引用, 還有一個軟引用

  //泛型指的是軟引用指向的型別

  //軟引用是記憶體不足時,物件被回收

  SoftReferencesoft = new SoftReference(ss);

  //獲取軟引用的物件

  String content = soft.get();

  System.out.println(content);

  ss = null; //強引用沒有了,這時只有軟引用指向"hello"

  System.gc(); //強制回收

  System.gc();

  System.gc();

  content = soft.get();//看看有沒有被回收

  }

  }

   3.什麼是弱引用?

  gc不記憶體是發現弱引用,就會立刻回收弱引用物件,但是我們知道gc是一個優先順序很低的執行緒,所以不一定立刻發現並回收弱引用物件,但記住,只要被gc發現弱引用,不管記憶體夠不夠,直接回收,同時,弱引用,也可以結合佇列使用,當被回收,就進去於之關聯的佇列中。

  程式碼

  public class WeakReference {

  public static void main(String[] args) {

  String ss = "hello";

  ReferenceQueuequeue = new ReferenceQueue<>();

  java.lang.ref.WeakReferenceweak = new

  java.lang.ref.WeakReference(ss,queue);

  System.out.println("現在的引用 " + weak.get());

  ss = null;

  System.gc(); //gc

  Reference poll = queue.poll(); //如果null,說明被回收了

  if(poll != null) {

  String content = poll.get();

  System.out.println(content);

  } //看看有沒有被回收

  }

  }

   4.什麼是虛引用?

  虛引用和前面的軟引用、弱引用不同,它並不影響物件的生命週期。在java中用java.lang.ref.PhantomReference類表示。如果一個物件與虛引用關聯,則跟沒有引用與之關聯一樣,在任何時候都可能被垃圾回收器回收。

  要注意的是,虛引用必須和引用佇列關聯使用,當垃圾回收器準備回收一個物件時,如果發現它還有虛引用,就會把這個虛引用加入到與之 關聯的引用佇列中。程式可以透過判斷引用佇列中是否已經加入了虛引用,來了解被引用的物件是否將要被垃圾回收。如果程式發現某個虛引用已經被加入到引用佇列,那麼就可以在所引用的物件的記憶體被回收之前採取必要的行動。

  import java.lang.ref.PhantomReference;

  import java.lang.ref.ReferenceQueue;

  public class Main {

  public static void main(String[] args) {

  ReferenceQueuequeue = new ReferenceQueue();

  PhantomReferencepr = new PhantomReference(newString("hello"), queue);

  System.out.println(pr.get());

  }

  }

   本文來自千鋒教育,轉載請註明出處。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2781630/,如需轉載,請註明出處,否則將追究法律責任。

相關文章