Java中的弱引用和虛引用都是與垃圾回收有關(guān)的引用,和強(qiáng)引用、軟引用不同,它們不會(huì)影響Java對(duì)象的生命周期。
弱引用
弱引用是一種較強(qiáng)的“非必需引用”,具有比軟引用更短的生命周期。如果一個(gè)對(duì)象只有弱引用指向它,那么它就可以被垃圾回收器隨時(shí)回收,即便在垃圾回收器剛剛掃描這個(gè)對(duì)象的時(shí)候。
WeakReference<Object> weakRef = new WeakReference<>(new Object());
可以使用java.lang.ref.WeakReference
Object obj = weakRef.get();
虛引用
虛引用是一種更弱的引用,也稱為“幽靈引用”或“幽靈指針”。它是所有引用類型中最弱的一種,即它不能通過虛引用訪問到它所引用的對(duì)象,也無法獲取到該引用所引用的對(duì)象。
Object obj = new Object(); ReferenceQueue<Object> queue = new ReferenceQueue<>(); PhantomReference<Object> phantomRef = new PhantomReference<>(obj, queue);
java.lang.ref.PhantomReference
弱引用和虛引用這兩種引用類型的使用都需要謹(jǐn)慎,因?yàn)樗鼈兊纳芷诜浅6蹋绻麘?yīng)用程序沒有正確的處理它們,就會(huì)對(duì)垃圾回收器的性能產(chǎn)生不良影響。正確使用這兩種引用類型可以幫助我們更有效地管理Java對(duì)象,避免內(nèi)存泄漏等問題。