一、強(qiáng)引用、軟引用、弱引用、幻象引用的區(qū)別
在Java語言中,引用是指一個(gè)對象的指針,它指向在堆中分配的內(nèi)存。在內(nèi)存中,對象所占據(jù)的區(qū)域稱為對象的生命周期。Java中的垃圾收集器自動(dòng)回收不再被引用的對象的內(nèi)存空間,以便為新的對象騰出空間。
強(qiáng)引用是Java中默認(rèn)的引用類型。如果一個(gè)對象被強(qiáng)引用,垃圾回收器就不會(huì)回收這個(gè)對象。當(dāng)內(nèi)存空間不足時(shí),JVM會(huì)拋出OutOfMemoryError異常。
軟引用是一種有些用處的引用類型,用來描述一些有用但并非必需的對象。如果一個(gè)對象只被軟引用引用,當(dāng)內(nèi)存空間不足時(shí),垃圾回收器會(huì)盡可能地回收它,但是如果回收后仍然沒有足夠的內(nèi)存空間,就會(huì)回收它。因此,軟引用通常被用來實(shí)現(xiàn)緩存機(jī)制。在Java中,可以使用java.lang.ref.SoftReference類來實(shí)現(xiàn)軟引用。
弱引用是一種比軟引用更弱的引用類型。如果一個(gè)對象只被弱引用引用,當(dāng)內(nèi)存空間不足時(shí),垃圾回收器會(huì)立即回收它。因此,弱引用通常被用來描述一些有用但不必須的對象。在Java中,可以使用java.lang.ref.WeakReference類來實(shí)現(xiàn)弱引用。
幻象引用是Java中最弱的引用類型。如果一個(gè)對象只被幻象引用引用,那么無論內(nèi)存空間是否足夠,垃圾回收器都會(huì)立即回收它。因此,幻象引用通常被用來在一個(gè)對象被垃圾回收器回收之前,執(zhí)行某些清理操作。在Java中,可以使用java.lang.ref.PhantomReference類來實(shí)現(xiàn)幻象引用。