国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

簡述Java中的四種引用類型

瀏覽:4日期:2022-08-14 14:51:16
簡介

從JDK1.2版本開始,把對象的引用分為四種級別,從而使程序能更加靈活的控制對象的生命周期。這四種級別由高到低依次為:強引用、軟引用、弱引用和虛引用,下面分別介紹下這四種引用。

強引用

強引用是最常用的引用類型,如下所示,new Object()會創建一個Object對象并存儲在堆上,變量object存儲對該對象的強引用。

Object object = new Object();

強引用不會被垃圾回收,所以要想回收該對象,則應該將指向該對象的變量顯示設為null,這樣該對象就由強引用轉變為無引用了。

示例:

public class ReferenceDemo { public static void main(String[] args) throws IOException {//強引用不會被垃圾回收ReferenceDemo referenceDemo = new ReferenceDemo();//強引用轉變為無引用,無引用可被垃圾回收referenceDemo = null;//觸發垃圾回收System.gc();//阻塞主線程,等待垃圾回收線程執行System.in.read(); } //對象被回收之前調用 @Override protected void finalize() throws Throwable {super.finalize();System.out.println('-----finalize-----'); }}軟引用

軟引用是使用SoftReference創建的,在內存空間充足的情況下,軟引用不會被回收,而在內存空間不足虛擬機拋出OutOfMemoryError之前,軟引用將會被回收。

示例:

public class ReferenceDemo { public static void main(String[] args) throws InterruptedException {//創建ReferenceDemo對象的軟引用SoftReference<ReferenceDemo> softReference = new SoftReference<>(new ReferenceDemo());//觸發垃圾回收System.gc();//阻塞主線程,等待垃圾回收線程執行Thread.sleep(5000);//softReference.get()返回軟引用對象,如果對象已經被垃圾回收,則返回nullSystem.out.println(softReference.get());//創建25M的字節數組byte[] bytes = new byte[1024 * 1024 * 25];//內存已經不足,阻塞主線程,等待垃圾回收線程執行Thread.sleep(5000);//重新輸出軟引用對象System.out.println(softReference.get()); }}/* * 輸出結果: * com.buhe.demo.demos.reference.ReferenceDemo@76fb509a * null */

注意:示例運行前需要設置堆內存大小為30M(-Xmx30m -Xms30m)。

用途:軟引用可以用于對內存空間敏感的緩存,緩存的對象一直保存,直到內存空間不足而被回收。

弱引用

弱引用是使用WeakReference創建的,在垃圾回收線程執行過程中,只要找到了弱引用,不管內存空間是否足夠,弱引用對象都將被回收。由于垃圾回收線程是一個優先級很低的線程,因此不一定會很快發現那些只具有弱引用的對象。

示例:

public class ReferenceDemo { public static void main(String[] args) throws InterruptedException {//創建ReferenceDemo的弱引用WeakReference<ReferenceDemo> weakReference = new WeakReference<>(new ReferenceDemo());//weakReference.get()返回弱引用對象,如果對象已經被垃圾回收,則返回nullSystem.out.println(weakReference.get());//觸發垃圾回收System.gc();//阻塞主線程,等待垃圾回收線程執行Thread.sleep(3000);//重新輸出弱引用對象System.out.println(weakReference.get()); }}/* * 輸出結果: * com.buhe.demo.demos.reference.ReferenceDemo@76fb509a * null */

用途:弱引用也可以用于緩存,可以參考WeakHashMap類。

虛引用

虛引用是使用PhantomReference創建的,它是所以引用類型中最弱的。虛引用對象和沒有引用的對象相同,可以在任何時候被垃圾回收,并且虛引用必須要與引用隊列一起使用。

當垃圾回收線程回收一個虛引用對象時,它將在垃圾回收后銷毀該對象,并將PhantomReference添加到引用隊列中。

示例:

public class ReferenceDemo { public static void main(String[] args) throws InterruptedException {//創建引用隊列ReferenceQueue<Object> referenceQueue = new ReferenceQueue();//創建ReferenceDemo的虛引用PhantomReference<ReferenceDemo> phantomReference = new PhantomReference<>(new ReferenceDemo(), referenceQueue);//phantomReference.get()總是返回nullSystem.out.println('phantomReference.get():' + phantomReference.get());//輪詢此隊列,查看是否有可用的Reference對象,有則返回該對象,否則返回nullSystem.out.println('referenceQueue.poll():' + referenceQueue.poll());//觸發垃圾回收System.gc();//阻塞主線程,等待垃圾回收線程執行Thread.sleep(3000);System.out.println('------垃圾回收之后------');System.out.println('phantomReference.get():' + phantomReference.get());System.out.println('referenceQueue.poll():' + referenceQueue.poll()); }}/* * 輸出結果: * phantomReference.get():null * referenceQueue.poll():null * ------垃圾回收之后------ * phantomReference.get():null * referenceQueue.poll():java.lang.ref.PhantomReference@76fb509a */

用途:虛引用可以用于精確的檢測對象何時從內存中刪除,通過檢查引用隊列來判斷對象是否已經被回收。

以上就是簡述Java中的四種引用類型的詳細內容,更多關于Java 引用類型的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 美美女高清毛片视频黄的一免费 | 国产在播放一区 | 国产v片在线播放免费观 | 欧美一级视频免费观看 | 免费在线观看一区 | 国产乱弄视频在线观看 | 国产精品一区二区三区久久 | 69凹凸国产成人精品视频 | 狠狠综合久久久久综合 | 久久国产高清 | 天堂8中文在线最新版在线 天堂8资源8在线 | 欧美亚洲视频一区 | 国产成人一区二区三区高清 | 2021国产精品自在拍在线播放 | 精品国产看高清国产毛片 | 欧美a级在线 | 国产日本一区二区三区 | 久久综合综合久久 | 久草视频在线资源 | 男人的亚洲天堂 | 亚洲综合色dddd26 | 日韩日韩日韩手机看片自拍 | 日本高清不卡在线观看 | 中文字幕综合在线 | 成人69 | 国产欧美日韩在线观看一区二区三区 | 精品一区二区三区18 | 91黑丝国产线观看免费 | 亚洲午夜精品在线 | 日本性色 | 男女视频免费看 | 欧美成人se01短视频在线看 | 男女男精品视频免费观看 | 久久精品亚洲精品一区 | 国产做国产爱免费视频 | 热热涩热热狠狠色香蕉综合 | 97在线视频精品 | 免费午夜不卡毛片 | 久久综合久久久 | 美女扒开腿让男人桶 | 69性欧美 |