Java的4種引用,強弱軟虛
今天遇到的面試題,當時我是一臉懵逼的。。。真有點虛啊- - !
強引用:
強引用不會被GC回收,並且在java.lang.ref裡也沒有實際的對應型別,平時工作接觸的最多的就是強引用。Object obj = new Object();這裡的obj引用便是一個強引用。如果一個物件具有強引用,那就類似於必不可少的生活用品,垃圾回收器絕不會回收它。 當記憶體空間不足,Java虛擬機器寧願丟擲OutOfMemoryError錯誤,使程式異常終止,也不會靠隨意回收具有強引用的物件來解決記憶體不足問題。
軟引用:如果一個物件只具有軟引用,那就類似於可有可物的生活用品。如果記憶體空間足夠,垃圾回收器就不會回收它,如果記憶體空間不足了,就會回收這些物件的記憶體
弱引用:
弱引用(weak reference)在強度上弱於軟引用,通過類WeakReference來表示。它的作用是引用一個物件,但是並不阻止該物件被回收。如果使用一個強引用的話,只要該引用存在,那麼被引用的物件是不能被回收的。弱引用則沒有這個問題。在垃圾回收器執行的時候,如果一個物件的所有引用都是弱引用的話,該物件會被回收。弱引用的作用在於解決強引用所帶來的物件之間在存活時間上的耦合關係。弱引用最常見的用處是在集合類中,尤其在雜湊表中。雜湊表的介面允許使用任何Java
對於這種情況的解決辦法就是使用弱引用來引用這些物件,這樣雜湊表中的鍵和值物件都能被垃圾回收。Java中提供了WeakHashMap來滿足這一常見需求。
虛引用:
在介紹幽靈引用之前,要先介紹Java提供的物件終止化機制(finalization)。在Object類裡面有個finalize方法,其設計的初衷是在一個物件被真正回收之前,可以用來執行一些清理的工作。因為Java
幽靈引用及其佇列的使用情況並不多見,主要用來實現比較精細的記憶體使用控制,這對於移動裝置來說是很有意義的。程式可以在確定一個物件要被回收之後,再申請記憶體建立新的物件。通過這種方式可以使得程式所消耗的記憶體維持在一個相對較低的數量。
Q1:引用佇列是什麼?如何使用?使用的場景有哪些?
A1:oracle的api文件的描述:
https://docs.oracle.com/javase/7/docs/api/java/lang/ref/ReferenceQueue.htmlReference queues, to which registered reference objects are appended by the garbage collector after the appropriate reachability changes are detected.
當物件的可及性的改變被GC發現時,與之相關聯的(registered)的reference object會被加入該佇列。
Q2:java的heap是什麼?
A2:如圖所示,Heap和Stack分別負責儲存不同型別的資料。
Stack區用於儲存基本資料型別和物件的引用;而Heap區儲存物件的例項。
Stack區的讀寫很快但缺點是資料的生存期和大小都是固定的,而Heap則可以動態申請記憶體。
具體內容很多,以後單獨寫上。
在Java裡, 當一個物件o被建立時, 它被放在Heap裡. 當GC執行的時候, 如果發現沒有任何引用指向o, o就會被回收以騰出記憶體空間. 或者換句話說, 一個物件被回收, 必須滿足兩個條件:
- 沒有任何引用指向它
- GC被執行.
Q1:引用佇列是什麼?如何使用?使用的場景有哪些?
A1:oracle的api文件的描述:
https://docs.oracle.com/javase/7/docs/api/java/lang/ref/ReferenceQueue.htmlReference queues, to which registered reference objects are appended by the garbage collector after the appropriate reachability changes are detected.
當物件的可及性的改變被GC發現時,與之相關聯的(registered)的reference object會被加入該佇列。
Q2:java的heap是什麼?
A2:如圖所示,Heap和Stack分別負責儲存不同型別的資料。
Stack區用於儲存基本資料型別和物件的引用;而Heap區儲存物件的例項。
Stack區的讀寫很快但缺點是資料的生存期和大小都是固定的,而Heap則可以動態申請記憶體。
具體內容很多,以後單獨寫上。
在Java裡, 當一個物件o被建立時, 它被放在Heap裡. 當GC執行的時候, 如果發現沒有任何引用指向o, o就會被回收以騰出記憶體空間. 或者換句話說, 一個物件被回收, 必須滿足兩個條件:
- 沒有任何引用指向它
- GC被執行.
相關推薦
java的四種引用,強弱軟虛,用到的場景
1、強引用(StrongReference) 強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。如下: 1 Object o=new Object();
java基礎(四) Java的四種引用,強弱軟虛,用到的場景
強引用: 強引用不會被GC回收,並且在java.lang.ref裡也沒有實際的對應型別,平時工作接觸的最多的就是強引用。 Object obj = new Object();這裡的obj引用便是一個強引用。 如果一個物件具有強引用,那就類似於必不可少的生活用品,垃
【JAVA】四種引用,強弱軟虛以及用到的場景
1、強引用(StrongReference) 強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。如下: 1 Object o=new Objec
5. Java的四種引用,強弱軟虛,用到的場景。
1、強引用(StrongReference) 強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。如下: 1 Object o=new Object(); // 強引用 當記憶體空
5.Java的四種引用,強弱軟虛,用到的場景。
在JDK1.2後,java對引用的概念進行了擴充。按照引用強度依次從強到弱分為:強引用、軟引用(SoftReference)、弱引用(WeakReference)、虛引用(PhantomReference)用四種。 強引用:最常見的,不會被GC回收的物件,如 Objec
Java的4種引用,強弱軟虛
今天遇到的面試題,當時我是一臉懵逼的。。。真有點虛啊- - ! 強引用: 強引用不會被GC回收,並且在java.lang.ref裡也沒有實際的對應型別,平時工作接觸的最多的就是強引用。Object obj = new Object();這裡的obj引用便是一個
java 強弱軟虛 四種引用,以及用到的場景
優先 時間 重新 通過 如果 sof queue hashcode 等待 1、利用軟引用和弱引用解決OOM問題:用一個HashMap來保存圖片的路徑和相應圖片對象關聯的軟引用之間的映射關系,在內存不足時,JVM會自動回收這些緩存圖片對象所占用的空間,從而有效地避免了OOM的
java 強弱軟虛 四種引用,以及用到的場景。
在JDK1.2後,java對引用的概念進行了擴充。按照引用強度依次從強到弱分為:強引用、軟引用(SoftReference)、弱引用(WeakReference)、虛引用(PhantomReference)用四種。 強引用:最常見的,不會被GC回收的物件,如 Object
java中的四種引用,強、軟、弱、虛
強引用:例如: Student stu = new Student(); 只要有強引用存在,關聯的物件就不會被垃圾回收機制回收。 軟引用:在系統要發生記憶體溢位前,軟引用關聯的物件會被垃圾回收機制回收。 弱引用:被若引用關聯的物件,下次垃圾回收機制執行的時候,會被回收掉。
JAVA強弱軟虛引用
一. 強引用、軟引用、弱引用、虛引用的概念 在Java中,雖然不需要程式設計師手動去管理物件的生命週期,但是如果希望某些物件具備一定的生命週期的話(比如記憶體不足時JVM就會自動回收某些物件從而避免OutOfMemory的錯誤)就需要用到軟引用和弱引用了。 從Java
Java四種引用---強、軟、弱、虛的知識點總結
前言 1.本文屬於知識點總結篇,基本內容以概念+原始碼分析+流程圖為主. 2.本文大多數概念,屬於站在巨人肩膀上整合而成,為了自己更好的複習和大眾對於這塊知識的瞭解. 3.本人學識尚淺,對於文章中如果有描述有誤的地方,還請大家及時通知,然後博主及時
Java四種引用包括強引用,軟引用,弱引用,虛引用
二次 tar ali emp replace 隊列 tails 清除 while Java四種引用包括強引用,軟引用,弱引用,虛引用。 強引用: 只要引用存在,垃圾回收器永遠不會回收Object obj = new Object();//可直接通過obj取得對應的對象
強引用,軟引用,弱引用,虛引用
code 沒有 != 二次 活動 post 解決 mem 即將 Java四種引用包括強引用,軟引用,弱引用,虛引用。 強引用: 只要引用存在,垃圾回收器永遠不會回收Object obj = new Object();//可直接通過obj取得對應的對象 如obj.equ
強引用,軟引用,弱引用與虛引用
img stringbu ride 分享圖片 tro 通過 一個 null 情況 強引用:(StrongReference) 強引用指普通的對象引用 例如: StringBuffer str = new StringBuffer("hello world"); 局部變量
JVM學習--強引用,軟引用,弱引用,虛引用
JVM學習–總索引 文章目錄 JVM學習--強引用,軟引用,弱引用,虛引用 強引用 軟引用 弱引用 虛引用 例子 JVM學習–強引用,軟引用,弱引用,虛引用 強引用 強引用就是程式
Java中的四種引用型別(強、軟、弱、虛)
為什麼需要不同的引用型別 從Java1.2開始,JVM開發團隊發現,單一的強引用型別,無法很好的管理物件在JVM裡面的生命週期,垃圾回收策略過於簡單,無法適用絕大多數場景。為了更好的管理物件的記憶體,更好的進行垃圾回收,JVM團隊擴充套件了引用型別,從最早的強引用型別增加到強、軟、弱、虛四個引用
Java的四種引用 強引用 軟引用 弱引用 虛引用
強引用: 只要引用存在,垃圾回收器永遠不會回收 Object obj = new Object();//可直接通過obj取得對應的物件 如obj.equels(new Object()); 而這樣 obj物件對後面new Object的一個強引用,只有當obj這個引
java類的生命週期-強引用,弱引用,虛引用,軟引用
1.強引用 package com.cap3; public class Test1 { static Object strongRefence=new Object(); public static void main(String[] args) {
四種引用型別:強引用、軟引用、弱引用、虛引用
java中除了基本資料型別的變數(int、long等),剩下的都是引用型別的變數,一共有四種不同的引用型別。 一、強引用(Strong Reference) 強引用就是最常見的對某個物件的引用,如下程式碼變數o就是對所建立的Object物件的一個強引用。 Object
java四種引用 強引用 軟引用 弱引用 虛引用
1、物件的強、軟、弱和虛引用 在JDK 1.2以前的版本中,若一個物件不被任何變數引用,那麼程式就無法再使用這個物件。也就是說,只有物件處於可觸及(reachable)狀態,程式才能使用它。從JDK 1.2版本開始,把物件的引用分為4種級別,從而使程式能更