再看SoftReference和WeakReference

java中的SoftReference和WeakReference已經出來很久了,但是到現在爲止開發的程序裏幾乎都沒有直接用到它們。

用不到,那就說明還沒有碰到需要用它們的場景,當然也有一個原因,就是不知道怎麼用。

 

簡單來說,java中的引用默認都是強引用,只要當引用存在(就是能從根引用遍歷到),GC就不會回收。

有時候,我們無法自己決定還要不要用一個實例,可能需要根據情況決定,那麼就有了SoftReference和WeakReference。

SoftReference:當jvm內存不夠用的時候,由jvm決定是否回收

WeakReference:無條件回收。

 

對於SoftReference,我們很自然的就想到了一個應用,那就是cache,cache裏的東西當然是存在的時間越長越好,但是畢竟有內存的限制,既然我們不知道什麼時候內存不夠用,那麼就把控制權交個jvm,jvm覺得內存不夠用了,那麼就去清理一下SoftReference裏的對象

 

對於WeakReference,只能想到一個應用場景,那就是,類A裏引用了類B裏的一個field實例,目的就是爲了當類B以及其成員沒被GC是,想在類A的方法裏對這個field進行操作,如果已經GC了,那麼就什麼都不做。

比如:一個異步請求返回數據時,去更新頁面A裏的表格,就可以在請求類裏保持一個對頁面A裏表格的一個WeakReference,如果在請求還未返回的時候,頁面A已經關掉了的話,也不影響表格的釋放。頁面A沒關掉的話,就可以直接更新了。

發佈了151 篇原創文章 · 獲贊 1 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章