java中引用類型是什么
java中引用類型是什么
引用類型 由類型的實(shí)際值引用(類似于指針)表示的數(shù)據(jù)類型。如果為某個變量分配一個引用類型,則該變量將引用(或“指向”)原始值。不創(chuàng)建任何副本。引用類型包括類、接口、委托和裝箱值類型。
Java中將引用分為四種:強(qiáng)引用(Strong Reference),軟引用(Soft Reference),弱引用(Weak Reference),虛引用(Phantom Reference)。這四種引用強(qiáng)度一次減弱。
強(qiáng)引用就是指在代碼中普遍存在的類似Object obj = new Object(); 這種引用,只要強(qiáng)引用還存在,垃圾回收器永遠(yuǎn)不會回收掉被引用的對象。
軟引用用來描述還有用但并非必須的對象。對于軟引用關(guān)聯(lián)著的對象,在系統(tǒng)將要發(fā)生內(nèi)存溢出異常之前,將會把這些對象列入回收范圍之中,并進(jìn)行第二次回收。如果這次還是沒有足夠的內(nèi)存,則會拋出內(nèi)存溢出異常,在JDK1.2之后,提供了Soft Reference類來實(shí)現(xiàn)軟引用。
弱引用也是用來描述非必須對象的,但她的強(qiáng)度比軟引用更弱一些,被弱引用關(guān)聯(lián)的對象只能生存到下一次垃圾收集發(fā)生之前。當(dāng)垃圾收集器工作的時候,不論當(dāng)前內(nèi)存是否足夠,都會回收掉”只被弱引用關(guān)聯(lián)的“對象。JDk1.2之后,提供Weak Reference類來實(shí)現(xiàn)弱引用。
虛引用也稱為幽靈引用或稱幻影引用,它是最弱的一種引用關(guān)系。一個對象是否有虛引用存在,完全不會對其生存時間構(gòu)成影響。也無法通過虛引用來取得一個對象實(shí)例。
在根搜索算法中不可達(dá)的對象也并非是”非死不可“的, 要宣告對象真正死亡,需要經(jīng)歷兩次標(biāo)記過程。根據(jù)Java的應(yīng)用類型間接描述了堆區(qū)的內(nèi)存回收機(jī)制。