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