SoftReference和WeakReference
?Java2增強了內存管理功能, 增加了一個java.lang.ref包,其中定義了三種引用類。這三種引用類分別為SoftReference、WeakReference和PhantomReference.通過使用這些引用類,程序員可以在一定程度與GC進行交互,以便改善GC的工作效率。這些引用類的引用強度介于可達對象和不可達對象之間。?
?
創建一個引用對象也非常容易,例如如果你需要創建一個Soft Reference對象,那么首先創建一個對象,并采用普通引用方式(可達對象);然后再創建一個SoftReference引用該對象;最后將普通引用設置為null.通過這種方式,這個對象就只有一個Soft Reference引用。同時,我們稱這個對象為Soft Reference 對象。?
?
Soft Reference的主要特點是據有較強的引用功能。只有當內存不夠的時候,才進行回收這類內存,因此在內存足夠的時候,它們通常不被回收。另外,這些引用對象還能保證在Java拋出OutOfMemory 異常之前,被設置為null.它可以用于實現一些常用圖片的緩存,實現Cache的功能,保證最大限度的使用內存而不引起OutOfMemory.以下給出這種引用類型的使用偽代碼;?
?
//申請一個圖像對象?
Image p_w_picpath=new Image();//創建Image對象?
…?
//使用 p_w_picpath?
…?
//使用完了p_w_picpath,將它設置為soft 引用類型,并且釋放強引用;?
SoftReference sr=new SoftReference(p_w_picpath);?
p_w_picpath=null;?
…?
//下次使用時?
if (sr!=null) p_w_picpath=sr.get();?
else{?
//由于GC由于低內存,已釋放p_w_picpath,因此需要重新裝載;?
p_w_picpath=new Image();?
sr=new SoftReference(p_w_picpath);?
}?
?
??? Weak引用對象與Soft引用對象的最大不同就在于:GC在進行回收時,需要通過算法檢查是否回收Soft引用對象,而對于Weak引用對象,GC總是進行回收。Weak引用對象更容易、更快被GC回收。雖然,GC在運行時一定回收Weak對象,但是復雜關系的Weak對象群常常需要好幾次GC的運行才能完成。Weak引用對象常常用于Map結構中,引用數據量較大的對象,一旦該對象的強引用為null時,GC能夠快速地回收該對象空間。?
轉載于:https://blog.51cto.com/jianshusoft/695169
總結
以上是生活随笔為你收集整理的SoftReference和WeakReference的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql plus能登录 plsqldev
- 下一篇: 一套PumpLinx泵阀仿真分析攻略