Java將引用分為強(qiáng)引用(Strong Reference)熟尉、軟引用(Soft Reference)揭厚、弱引用(Weak Reference)币砂、虛引用(Phantom)4種尖飞,這四種引用強(qiáng)度依次逐漸減弱戈轿。
1.強(qiáng)引用
強(qiáng)引用就是指在程序代碼中普遍存在的凌受,類似
ViewRootImpl root = new ViewRootImpl();
這類的引用,只要強(qiáng)引用還存在思杯,垃圾收集器永遠(yuǎn)不會(huì)回收掉被引用的對(duì)象胜蛉。
- 軟引用
軟引用是用來描述一些還有用但并非必需的對(duì)象。對(duì)于軟引用關(guān)聯(lián)著的對(duì)象智蝠,在系統(tǒng)將要發(fā)生內(nèi)存溢出異常之前腾么,將會(huì)把這些對(duì)象列進(jìn)回收范圍之中進(jìn)行第二次回收。如果這次回收還沒有足夠的內(nèi)存杈湾,才會(huì)拋出內(nèi)存溢出異常解虱。SoftReference類來實(shí)現(xiàn)軟引用。
SoftReference<ViewRootImpl> wrf = new SoftReference<String>(root);
- 弱引用
弱引用也是用來描述非必需對(duì)象的漆撞,但是它的強(qiáng)度比軟引用更弱一些殴泰,被弱引用關(guān)聯(lián)的對(duì)象只能生存到下一次垃圾收集發(fā)生之前。當(dāng)垃圾收集器工作時(shí)浮驳,無論當(dāng)前內(nèi)存是否足夠悍汛,都會(huì)回收掉只被弱引用關(guān)聯(lián)的對(duì)象。Java提供了WeakReference類來實(shí)現(xiàn)弱引用至会。
WeakReference<ViewRootImpl> wrf = new WeakReference<String>(root);
- 虛引用
虛引用也成為幽靈引用或者幻影引用离咐,它是最弱的一種引用關(guān)系。一個(gè)對(duì)象是否有虛引用的存在,完全不會(huì)對(duì)其生存時(shí)間構(gòu)成影響宵蛀,也無法通過虛引用來取得一個(gè)對(duì)象實(shí)例昆著。為一個(gè)對(duì)象設(shè)置虛引用關(guān)聯(lián)的唯一目的就是能在這個(gè)對(duì)象被收集器回收時(shí)收到一個(gè)系統(tǒng)通知。Java提供了PhantomReference類來實(shí)現(xiàn)虛引用术陶。
PhantomReference<ViewRootImpl> wrf = new PhantomReference<String>(root);