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