日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

深入了解JAVA 虛引用

瀏覽:32日期:2022-08-27 08:44:34

定義

虛引用是使用PhantomReference創建的引用,虛引用也稱為幽靈引用或者幻影引用,是所有引用類型中最弱的一個。一個對象是否有虛引用的存在,完全不會對其生命周期構成影響,也無法通過虛引用獲得一個對象實例。

說明

虛引用,正如其名,對一個對象而言,這個引用形同虛設,有和沒有一樣。

如果一個對象與GC Roots之間僅存在虛引用,則稱這個對象為虛可達(phantom reachable)對象。

當試圖通過虛引用的get()方法取得強引用時,總是會返回null,并且,虛引用必須和引用隊列一起使用。既然這么虛,那么它出現的意義何在??

別慌別慌,自然有它的用處。它的作用在于跟蹤垃圾回收過程,在對象被收集器回收時收到一個系統通知。 當垃圾回收器準備回收一個對象時,如果發現它還有虛引用,就會在垃圾回收后,將這個虛引用加入引用隊列,在其關聯的虛引用出隊前,不會徹底銷毀該對象。 所以可以通過檢查引用隊列中是否有相應的虛引用來判斷對象是否已經被回收了。

如果一個對象沒有強引用和軟引用,對于垃圾回收器而言便是可以被清除的,在清除之前,會調用其finalize方法,如果一個對象已經被調用過finalize方法但是還沒有被釋放,它就變成了一個虛可達對象。

與軟引用和弱引用不同,顯式使用虛引用可以阻止對象被清除,只有在程序中顯式或者隱式移除這個虛引用時,這個已經執行過finalize方法的對象才會被清除。想要顯式的移除虛引用的話,只需要將其從引用隊列中取出然后扔掉(置為null)即可。

同樣來看一個栗子:

public class PhantomReferenceTest { private static final List<Object> TEST_DATA = new LinkedList<>(); private static final ReferenceQueue<TestClass> QUEUE = new ReferenceQueue<>(); public static void main(String[] args) { TestClass obj = new TestClass('Test'); PhantomReference<TestClass> phantomReference = new PhantomReference<>(obj, QUEUE); // 該線程不斷讀取這個虛引用,并不斷往列表里插入數據,以促使系統早點進行GC new Thread(() -> { while (true) { TEST_DATA.add(new byte[1024 * 100]); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); Thread.currentThread().interrupt(); } System.out.println(phantomReference.get()); } }).start(); // 這個線程不斷讀取引用隊列,當弱引用指向的對象唄回收時,該引用就會被加入到引用隊列中 new Thread(() -> { while (true) { Reference<? extends TestClass> poll = QUEUE.poll(); if (poll != null) { System.out.println('--- 虛引用對象被jvm回收了 ---- ' + poll); System.out.println('--- 回收對象 ---- ' + poll.get()); } } }).start(); obj = null; try { Thread.currentThread().join(); } catch (InterruptedException e) { e.printStackTrace(); System.exit(1); } } static class TestClass { private String name; public TestClass(String name) { this.name = name; } @Override public String toString() { return 'TestClass - ' + name; } }}

使用的虛擬機設置如下:

-verbose:gc -Xms4m -Xmx4m -Xmn2m

運行結果如下:

[GC (Allocation Failure) 1024K->432K(3584K), 0.0113386 secs][GC (Allocation Failure) 1455K->520K(3584K), 0.0133610 secs][GC (Allocation Failure) 1544K->648K(3584K), 0.0008654 secs]nullnullnull[GC (Allocation Failure) 1655K->973K(3584K), 0.0008111 secs]null...省略幾個null的輸出[GC (Allocation Failure) 1980K->1997K(3584K), 0.0009289 secs][Full GC (Ergonomics) 1997K->1870K(3584K), 0.0048483 secs]--- 弱引用對象被jvm回收了 ---- java.lang.ref.PhantomReference@74cbe23d--- 回收對象 ---- nullnull...省略幾個null和幾次Full GC的輸出[Full GC (Ergonomics) 2971K->2971K(3584K), 0.0024850 secs][Full GC (Allocation Failure) 2971K->2971K(3584K), 0.0022460 secs]Exception in thread 'Thread-0' java.lang.OutOfMemoryError: Java heap spaceat weakhashmap.PhantomReferenceTest.lambda$main$0(PhantomReferenceTest.java:20)at weakhashmap.PhantomReferenceTest$$Lambda$1/2065951873.run(Unknown Source)at java.lang.Thread.run(Thread.java:748)

因為設置的虛擬機堆大小比較小,所以創建一個100k的對象時直接進入了老年代,等到發生Full GC時才會被掃描然后回收。

適用場景

使用虛引用的目的就是為了得知對象被GC的時機,所以可以利用虛引用來進行銷毀前的一些操作,比如說資源釋放等。這個虛引用對于對象而言完全是無感知的,有沒有完全一樣,但是對于虛引用的使用者而言,就像是待觀察的對象的把脈線,可以通過它來觀察對象是否已經被回收,從而進行相應的處理。

事實上,虛引用有一個很重要的用途就是用來做堆外內存的釋放,DirectByteBuffer就是通過虛引用來實現堆外內存的釋放的。

小結

虛引用是最弱的引用 虛引用對對象而言是無感知的,對象有虛引用跟沒有是完全一樣的 虛引用不會影響對象的生命周期 虛引用可以用來做為對象是否存活的監控

以上就是詳解JAVA 虛引用的詳細內容,更多關于JAVA 虛引用的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩av三区| 久久精品1区| 午夜一区在线| 亚洲精华国产欧美| 亚洲二区三区不卡| 激情婷婷综合| 黑丝一区二区三区| 午夜在线一区| 视频一区国产视频| 亚洲免费福利一区| 亚洲精品系列| 欧美日本久久| 国产精品观看| 国内自拍视频一区二区三区| 日本精品国产| 日韩av网站在线观看| 国产精品大片免费观看| 精品亚洲a∨一区二区三区18| 精品72久久久久中文字幕| sm久久捆绑调教精品一区| 国产精品蜜芽在线观看| 神马午夜久久| 蜜臀精品久久久久久蜜臀| 亚洲欧美日本国产| 国产精品最新| 不卡福利视频| 红桃视频亚洲| 深夜福利一区| 国产乱人伦丫前精品视频| 日本一二区不卡| 国产一区二区三区久久 | 欧美理论视频| 视频在线在亚洲| 久久99久久久精品欧美| 成人小电影网站| 国产精品日韩欧美一区| 久久国产乱子精品免费女| 高清一区二区| 999在线观看精品免费不卡网站| 亚洲免费资源| 国产中文字幕一区二区三区| 亚洲第一精品影视| 五月亚洲婷婷 | 99国产精品视频免费观看一公开 | 欧美在线观看视频一区| 亚洲专区视频| 韩日一区二区| 亚洲一区久久| 免费日韩一区二区三区| 成人黄色av| 亚洲婷婷在线| 日韩欧美激情| 国产在视频一区二区三区吞精| 日韩在线欧美| 一区二区精彩视频| 免费在线亚洲欧美| 欧美99久久| 88久久精品| 欧美成人精品| 国产欧美日韩| 久久久久久久久丰满| 蜜臀av一区二区三区| 捆绑调教美女网站视频一区| 久久精品动漫| 亚洲精品少妇| 国产+成+人+亚洲欧洲在线| 亚洲精品在线观看91| 国产精品网址| 美女精品网站| sm捆绑调教国产免费网站在线观看| 欧美日韩国产在线一区| 国产欧美一区| 午夜国产欧美理论在线播放| 久久不见久久见国语| 一区免费视频| 国产一区二区三区四区五区传媒| 男女男精品网站| 97精品国产| 91欧美精品| 老鸭窝亚洲一区二区三区| 国产aⅴ精品一区二区三区久久| 久久福利影视| 欧美不卡高清一区二区三区| 国产精品大片免费观看| 蜜臀av在线播放一区二区三区| a天堂资源在线| 青青草视频一区| 黄色在线一区| 日韩欧美一区二区三区免费看| 欧美一级二级三级视频| 国产精品腿扒开做爽爽爽挤奶网站| 国产一区二区三区探花| 97久久精品| 美女精品一区| 免费成人网www| 欧美日韩亚洲一区三区| 亚洲欧美日韩国产| 五月激情久久| 国产一区二区色噜噜| 国产探花在线精品| 亚洲精品影视| 黄色成人在线网址| 欧美日韩精品免费观看视欧美高清免费大片 | 精品国产免费人成网站| 国产免费av一区二区三区| 欧美日韩国产一区精品一区| 日韩欧美精品一区| 麻豆国产精品一区二区三区| 免费日韩视频| 国产精品1luya在线播放| 亚洲不卡av不卡一区二区| 午夜欧美精品| 免费看av不卡| 国产欧美日韩精品一区二区免费| 亚洲一区二区毛片| 成人国产精品一区二区免费麻豆| 日本不卡视频在线| 免费精品视频在线| 91久久国产| 日韩精品欧美激情一区二区| 国产精品夜夜夜| 国产欧美日韩精品一区二区三区| 日韩精品欧美成人高清一区二区| 国产免费成人| 美女久久一区| 中文精品电影| 日本成人中文字幕在线视频| 日本亚洲视频在线| 日韩综合小视频| 91p九色成人| 国产精品调教视频| 久久精品国产久精国产爱| 国产精品久久国产愉拍| 麻豆91小视频| 狠狠久久伊人中文字幕| 麻豆91小视频| 成人在线视频区| 精品国产99| caoporn视频在线| 欧洲亚洲一区二区三区| 国产99久久久国产精品成人免费| 九色porny丨国产首页在线| 久久久人人人| 亚洲激情中文在线| 天堂成人国产精品一区| 亚洲欧美一级| 国产精品男女| 精品福利久久久| 精品久久美女| 国产日韩欧美一区二区三区在线观看| 婷婷六月综合| 鲁大师影院一区二区三区| 国产情侣久久| 亚洲成人不卡| 国产精品一卡| 日韩专区在线视频| 久久一区精品| 美女久久久久久| 伊人久久亚洲| 日韩高清电影免费| 国产精品22p| 日本精品在线中文字幕| 狠狠干综合网| 欧美一区在线观看视频| 国产一区二区三区视频在线| 中文字幕成在线观看| 午夜欧美精品久久久久久久| 日韩国产在线观看一区| 精品久久国产一区| 亚洲精品2区| 欧美午夜三级| 亚洲黄色中文字幕| 蜜臀久久99精品久久久久宅男 | 日韩视频一区| 欧美日本不卡高清| 亚洲不卡系列| 天堂久久av| 精品国产a一区二区三区v免费| 黑人精品一区| 免费在线视频一区| 精品香蕉视频| 亚洲欧美久久久| 精品国产亚洲日本| 精品91久久久久| 国产美女亚洲精品7777| 欧美日韩一区二区三区视频播放| 中文字幕乱码亚洲无线精品一区| 久久wwww| 丝袜国产日韩另类美女| 欧美一区在线观看视频| 蜜臀91精品一区二区三区| 91精品婷婷色在线观看| 日韩免费福利视频| 久久国产精品美女| 天堂俺去俺来也www久久婷婷| 四虎成人精品一区二区免费网站| 免播放器亚洲一区| 国产精品嫩草影院在线看| 国产一区二区三区不卡视频网站 | 久久久精品区|