What-什麼是弱引用?
Java中的弱引用具體指的是java.lang.ref.WeakReference
弱引用物件的存在不會阻止它所指向的物件被垃圾回收器回收。弱引用最常見的用途是實作規範映射(canonicalizing mappings,例如雜湊表)。
假設垃圾收集器在某個時間點決定一個物件是弱可達的(weakly reachable)(也就是說目前指向它的全都是弱引用),這時垃圾收集器會清除所有指向該物件的弱引用,然後把這個弱可達物件標記為可終結(finalizable)的,這樣它隨後就會被回收。同時或稍後,垃圾收集器會把那些剛清除的弱引用放入創建弱引用物件時所指定的參考佇列(Reference Queue)中。
實際上,Java中存在四種引用,它們由強到弱依序是:強引用、軟引用、弱引用、虛引用。下面我們簡單介紹下除弱引用外的其他三種引用:
強引用(Strong Reference):通常我們透過new來建立一個新物件時傳回的參考就是一個強引用,若一個物件透過一系列強引用可到達,它就是強可達的(strongly reachable),那麼它就不被回收
軟引用(Soft Reference):軟引用和弱引用的區別在於,若一個物件是弱引用可達,無論當前記憶體是否充足它都會被回收,而軟引用可達的物件在記憶體不充足時才會被回收,因此軟引用要比弱引用「強」一些
虛引用(Phantom Reference):虛引用是Java中最弱的引用,那麼它弱到什麼程度呢?它是如此脆弱以至於我們透過虛引用甚至無法獲取到被引用的對象,虛引用存在的唯一作用就是當它指向的對像被回收後,虛引用本身會被加入到引用隊列中,用作記錄它指向的物件已被回收。
Why-為什麼要使用弱引用?
考慮下面的場景:現在有一個Product類別代表一種產品,這個類別被設計為不可擴展的,而此時我們想要為每個產品增加一個編號。一個解決方案是使用HashMap
所以這種情況下,我們想要真正的回收一個Product對象,僅僅把它的強引用賦值為null是不夠的,還要把相應的條目從HashMap中移除。顯然「從HashMap中移除不再需要的條目」這個工作我們不想自己完成,我們希望告訴垃圾收集器:在只有HashMap中的key在引用著Product物件的情況下,就可以回收對應Product物件了。顯然,根據前面弱引用的定義,使用弱引用能幫助我們達成這個目的。我們只需要用一個指向Product物件的弱引用物件來作為HashMap中的key就可以了。
How——如何使用弱引用?
拿上面介紹的場景舉例,我們使用一個指向Product物件的弱引用物件來作為HashMap的key,只需這樣定義這個弱引用物件:
weakProduct#weakProductA);##weakProduct#weakProduct就指向了Product物件productA。那我們要怎麼透過weakProduct來取得它所指向的Product物件productA呢?很簡單,只需要下面這句程式碼:Product productA = new Product(...);
WeakReferenceweakProductA = new WeakReference(productA);
Product product = weakProductA.get();
引用隊列
//创建一个指向给定对象的弱引用 WeakReference(T referent) //创建一个指向给定对象并且登记到给定引用队列的弱引用 WeakReference(T referent, ReferenceQueue super T> q)我們可以看到第二個建構方法中提供了一個ReferenceQueue類型的參數,透過提供這個參數,我們就把創建的弱引用物件註冊到了一個引用隊列上,這樣當它被垃圾回收器清除時,就會把它送入這個引用隊列中,我們便可以對這些被清除的弱引用對象進行統一管理。 ###
以上是Java弱引用的學習與了解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允許Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

JavaispoperfulduetoitsplatFormitiondence,對象與偏見,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

Java的頂級功能包括:1)面向對象編程,支持多態性,提升代碼的靈活性和可維護性;2)異常處理機制,通過try-catch-finally塊提高代碼的魯棒性;3)垃圾回收,簡化內存管理;4)泛型,增強類型安全性;5)ambda表達式和函數式編程,使代碼更簡潔和表達性強;6)豐富的標準庫,提供優化過的數據結構和算法。

javaisnotirelyplatemententedduetojvmvariationsandnativecodinteinteration,butitlargelyupholdsitsitsworapromise.1)javacompilestobytecoderunbythejvm

thejavavirtualmachine(JVM)IsanabtractComputingmachinecrucialforjavaexecutionasitrunsjavabytecode,使“ writeononce,runanywhere”能力

Javaremainsagoodlanguageduetoitscontinuousevolutionandrobustecosystem.1)Lambdaexpressionsenhancecodereadabilityandenablefunctionalprogramming.2)Streamsallowforefficientdataprocessing,particularlywithlargedatasets.3)ThemodularsystemintroducedinJava9im

Javaisgreatduetoitsplatformindependence,robustOOPsupport,extensivelibraries,andstrongcommunity.1)PlatformindependenceviaJVMallowscodetorunonvariousplatforms.2)OOPfeatureslikeencapsulation,inheritance,andpolymorphismenablemodularandscalablecode.3)Rich

Java的五大特色是多態性、Lambda表達式、StreamsAPI、泛型和異常處理。 1.多態性讓不同類的對象可以作為共同基類的對象使用。 2.Lambda表達式使代碼更簡潔,特別適合處理集合和流。 3.StreamsAPI高效處理大數據集,支持聲明式操作。 4.泛型提供類型安全和重用性,編譯時捕獲類型錯誤。 5.異常處理幫助優雅處理錯誤,編寫可靠軟件。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1
好用且免費的程式碼編輯器