什麼是java四大引用?
相信現在有很多人正在學習java程式語言,其中java的四大引用相信很多同學都不是非常熟悉,那麼什麼是java四大引用?來看看下面的詳細介紹。
什麼是java四大引用?是JDK1.2版本開始引入,把物件的引用分為4個等級,我們平時學習的就是四種的第一級的強引用,說白了,就Object o = new Object(),四個引用分別是強引用、軟引用、弱引用和虛引用,請記住它們的順序!因為這是它們對記憶體的敏感程度!
等級: 強 > 軟 > 弱 > 虛
它們有什麼作用?
·靈活的控制物件的生命週期
·提高物件的回收機率
理論加程式碼分析:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 中的強引用、軟引用、弱引用和虛引用分別是什麼?Java
- Java四大引用詳解:強引用、軟引用、弱引用、虛引用Java
- java的四大引用型別Java型別
- Java中的四大引用筆記Java筆記
- 什麼是股市中成功波段操作四大技巧是什麼??
- Java是什麼_Java是做什麼的?Java
- PHP的引用計數是什麼意思?PHP
- java中有哪幾種引用?它們的含義和區別是什麼Java
- Java是什麼? Java適用於什麼工作?Java
- 什麼是java常量Java
- 什麼是java常量?Java
- java 中/**是什麼Java
- 資料庫事務四大特性是什麼?資料庫
- 強引用、軟引用、弱引用、幻象引用有什麼區別?
- Java swing是什麼?有什麼作用?Java
- java中RMI是什麼Java
- java中@Inherited是什麼?Java
- java中@Retention是什麼?Java
- Java 繼承是什麼?Java繼承
- [Java] 什麼是Applet (Java 小程式)JavaAPP
- Java是什麼?主要是幹什麼的?Java
- 什麼是java?為什麼大家都學習java技術?Java
- Java到底是什麼?學習java可以做什麼呢?Java
- Java和Python是什麼?有什麼區別?JavaPython
- python的引用是什麼Python
- python反向引用是什麼?Python
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- 國外CRM系統的四大優勢是什麼?
- Java - 是值傳遞還是引用傳遞Java
- 什麼是 Java 構造器?Java
- java | 什麼是動態代理?Java
- java中死鎖是什麼Java
- Java序列化是什麼Java
- java switch語句是什麼?Java
- java稀疏陣列是什麼Java陣列
- java中lock介面是什麼Java
- Java到底是什麼呢Java
- Java培訓:什麼是Java?為什麼大家都學習Java技術?Java