作者: 西魏陶淵明
部落格: 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 | 虛引用 | 用于跟蹤對象是否被回收 | 垃圾回收後終止 |