WeakReference與軟引用的區別在于它們被垃圾回收器回收時的行為。
SoftReference是Java中的一個類,它允許程序員在內存不足時回收其所引用的對象。具體來說,當JVM內存緊張時,垃圾回收器會考慮清理那些僅有SoftReference引用的對象,以此來釋放內存資源。如果這次清理還沒有足夠的內存,JVM將會拋出內存溢出異常。因此,SoftReference可以用來實現內存敏感的高速緩存系統。
而WeakReference則是Java中的一個接口,它繼承自Reference類。當一個對象只被WeakReference引用時,無論當前JVM的內存是否充足,垃圾回收器都會在下一次回收時清理該對象。這意味著,使用WeakReference引用的對象通常只能存活到下一次垃圾回收之前。WeakReference常用于實現規范映射(canonicalizing mappings)的數據結構,這種數據結構在第一次訪問時會創建一個對象,然后在后續的訪問中使用該對象的弱引用。
總的來說,SoftReference和WeakReference都用于實現垃圾回收器在內存不足時的對象清理,但它們的清理時機和條件有所不同。SoftReference在內存緊張時可能會被清理,而WeakReference則會在下一次垃圾回收時被清理。