一、強引用
我們平時new了一個對象就是強引用,例如
Object obj = new Object();
即使在內(nèi)存不足的情況下,JVM寧愿拋出OutOfMemory錯誤也不會回收這種對象。
(推薦視頻教程:java視頻教程)
二、軟引用
如果一個對象只具有軟引用,則內(nèi)存空間足夠,垃圾回收器就不會回收它;如果內(nèi)存空間不足了,就會回收這些對象的內(nèi)存。
SoftReference<String> softRef=new SoftReference<String>(str); // 軟引用
用處:
軟引用在實際中有重要的應(yīng)用,例如瀏覽器的后退按鈕。按后退時,這個后退時顯示的網(wǎng)頁內(nèi)容是重新進(jìn)行請求還是從緩存中取出呢?這就要看具體的實現(xiàn)策略了。
(1)如果一個網(wǎng)頁在瀏覽結(jié)束時就進(jìn)行內(nèi)容的回收,則按后退查看前面瀏覽過的頁面時,需要重新構(gòu)建。
(2)如果將瀏覽過的網(wǎng)頁存儲到內(nèi)存中會造成內(nèi)存的大量浪費,甚至?xí)斐蓛?nèi)存溢出。
如下代碼:
Browser prev = new Browser(); // 獲取頁面進(jìn)行瀏覽 SoftReference sr = new SoftReference(prev); // 瀏覽完畢后置為軟引用 if(sr.get()!=null){ rev = (Browser) sr.get(); // 還沒有被回收器回收,直接獲取 }else{ prev = new Browser(); // 由于內(nèi)存吃緊,所以對軟引用的對象回收了 sr = new SoftReference(prev); // 重新構(gòu)建 }
相關(guān)教程推薦:java快速入門