天天看點

Java四大引用

Java四大引用

作者: 西魏陶淵明

部落格: ​​https://blog.springlearn.cn/​​

西魏陶淵明

莫笑少年江湖夢,誰不少年夢江湖

一、概念

1. 強引用

new 對象并指向引用變量的都是強引用,開發中大部分都是強引用。對于強引用,JVM甯願報錯​

​OutOfMemoryError​

​​錯誤,是程式異常終止,

也不會回收強引用來解決記憶體, 對這類情況,可以通過指派強引用對象=null,進而被JVM回收。

但是一般我們在方法中定義的強引用,會存在方法棧中,當方法運作完,退出,此時方法中的強引用也會因為引用數為0,進而被回收。

2. 軟引用

在記憶體充足情況下,GC不會回收軟引用對象,如果記憶體空間不足了,才會回收這些對象的記憶體。也正因為這個特性,是以軟引用經常用作緩存對象使用。

3. 弱引用

任意GC都會清理掉軟引用對象,弱引用是最容易記的,任何的GC動作都會将弱引用對象給回收掉。

4. 虛引用

和其他三個不一樣,這個不對生命周期,有影響,而是當要回收時候,加入到Queue隊列中

二、在JDK中的展現

引用說明 用途 生存時間 被垃圾回收時間
Object 預設new出來的都是強引用 對象正常狀态 JVM停止或者無引用被回收 無任務對象使用
SoftReference 軟引用 常用作緩存 當記憶體不足時候終止 記憶體不足時候回收
WeakReference 弱引用 常用作緩存 垃圾回收後終止 任何垃圾回收時
PhantomReference 虛引用 用于跟蹤對象是否被回收 垃圾回收後終止