摘要:在之后,對引用的概念進行了擴充,將引用分為強引用軟引用弱引用虛引用種,這種引用強度依次逐漸減弱。軟引用是用來描述一些還有用但并非必需的對象。虛引用也稱為幽靈引用或者幻影引用,它是最弱的一種引用關(guān)系。
以下內(nèi)容摘自《深入理解Java虛擬機 JVM高級特性與最佳實踐》第2版,強烈推薦沒有看過的同學閱讀,讀完的感覺就是“原來學的都是些什么瘠薄東西(╯‵□′)╯︵┴─┴”
在JDK1.2以前,Java中的引用的定義很傳統(tǒng):如果 reference類型的數(shù)據(jù)中存儲的數(shù)值代表的是另外一塊內(nèi)存的起始地址,就稱這塊內(nèi)存代表著一個引用。這種定義很純粹,但是太過狹隘,一個對象在這種定義下只有被引用或者沒有被引用兩種狀態(tài),對于如何描述一些“食之無味,棄之可惜”的對象就顯得無能為力。我們希望能描述這樣一類對象:當內(nèi)存空間還足夠時,則能保留在內(nèi)存之中;如果內(nèi)存空間在進行垃圾收集后還是非常緊張,則可以拋棄這些對象。很多系統(tǒng)的緩存功能都符合這樣的應(yīng)用場景。
在JDK1.2之后,Java對引用的概念進行了擴充,將引用分為強引用(Strong Reference)、軟引用(Soft Reference)、弱引用(Weak Reference)、虛引用(Phantom Reference)4種,這4種引用強度依次逐漸減弱。
強引用就是指在程序代碼之中普遍存在的,類似“Object obj= new Object()”這類的引用,只要強引用還存在,垃圾收集器永遠不會回收掉被引用的對象。
軟引用是用來描述一些還有用但并非必需的對象。對于軟引用關(guān)聯(lián)著的對象,在系統(tǒng)將要發(fā)生內(nèi)存溢出異常之前,將會把這些對象列進回收范圍之中進行第二次回收。如果這次回收還沒有足夠的內(nèi)存才會拋出內(nèi)存溢出異常。在JDK1.2之后,提供了SoftReference類來實現(xiàn)軟引用。
弱引用也是用來描述非必需對象的,但是它的強度比軟引用更弱一些,被弱引用關(guān)聯(lián)的對象只能生存到下一次垃圾收集發(fā)生之前。當垃圾收集器工作時,無論當前內(nèi)存是否足夠,都會回收掉只被弱引用關(guān)聯(lián)的對象。在JDK1.2之后,提供了WeakReference類來實現(xiàn)弱引用。
虛引用也稱為幽靈引用或者幻影引用,它是最弱的一種引用關(guān)系。一個對象是否有虛引用的存在,完全不會對其生存時間構(gòu)成影響也無法通過虛引用來取得一個對象實例。為一個對象設(shè)置虛引用關(guān)聯(lián)的唯一目的就是能在這個對象被收集器回收時收到一個系統(tǒng)通知。在JDK1.2之后,提供了Phantom Reference類來實現(xiàn)虛引用。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/72610.html
摘要:虛引用與軟引用和弱引用的一個區(qū)別在于虛引用必須和引用隊列聯(lián)合使用。 本文已同步至個人博客liaosis blog 在Java中是由JVM負責內(nèi)存的分配和回收,這是它的優(yōu)點(簡化編程者的工作,不需要像C語言那樣去手動操作內(nèi)存),但同時也是它的缺點(不夠靈活,垃圾回收對于編程者來說是不可控的)。 在JDK1.2以前,如果一個對象不被任何變量引用,則程序無法再次使用這個對象,這個對象最終會...
摘要:如果想中斷強引用和某個對象之間的關(guān)聯(lián),可以顯式地將引用賦值為,這樣一來的話,在合適的時間就會回收該對象。不過由于垃圾回收器是一個優(yōu)先級較低的線程,所以并不一定能迅速發(fā)現(xiàn)弱引用對象。 強引用,軟引用,弱引用,虛引用。不同的引用類型主要體現(xiàn)在GC上: △強引用:如果一個對象具有強引用,它就不會被垃圾回收器回收。即使當前內(nèi)存空間不足,JVM也不會回收它,而是拋出 OutOfMemoryErr...
摘要:簡單來說就是引用和引用隊列關(guān)聯(lián)起來引用的構(gòu)造函數(shù)傳入隊列,然后引用被回收的時候會被添加到隊列中,然后使用方法可以返回引用。 引語: ????我們知道java相比C,C++中沒有令人頭痛的指針,但是卻有和指針作用相似的引用對象(Reference),就是常說的引用,比如,Object obj = new Object();這個obj就是引用,它指向的是真正的對象Object的地址,不過今...
閱讀 2383·2021-11-24 10:33
閱讀 1450·2019-08-30 15:43
閱讀 3337·2019-08-29 17:24
閱讀 3550·2019-08-29 14:21
閱讀 2282·2019-08-29 13:59
閱讀 1790·2019-08-29 11:12
閱讀 2893·2019-08-28 18:00
閱讀 1925·2019-08-26 12:17