免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
java弱引用(WeakReference)和SoftReference的區(qū)別以及在android內(nèi)存處理的作用

weakReference一般用來防止內(nèi)存泄漏,要保證內(nèi)存被VM回收 

softReference的話,好像多用作來實現(xiàn)cache機制.

 

WeakReference: 

弱引用對象,它們并不禁止其指示對象變得可終結(jié),并被終結(jié),然后被回收。弱引用最常用于實現(xiàn)規(guī)范化的映射。  

假定垃圾回收器確定在某一時間點上某個對象是弱可到達對象。這時,它將自動清除針對此對象的所有弱引用,以及通過強引用鏈和軟引用,可以從其到達該對象的針對任何其他弱可到達對象的所有弱引用。同時它將聲明所有以前的弱可到達對象為可終結(jié)的。在同一時間或晚些時候,它將那些已經(jīng)向引用隊列注冊的新清除的弱引用加入隊列。   


/////////////////// 
SoftReference: 
軟引用對象,在響應(yīng)內(nèi)存需要時,由垃圾回收器決定是否清除此對象。軟引用對象最常用于實現(xiàn)內(nèi)存敏感的緩存。  

假定垃圾回收器確定在某一時間點某個對象是軟可到達對象。這時,它可以選擇自動清除針對該對象的所有軟引用,以及通過強引用鏈,從其可以到達該對象的針對任何其他軟可到達對象的所有軟引用。在同一時間或晚些時候,它會將那些已經(jīng)向引用隊列注冊的新清除的軟引用加入隊列。   

軟可到達對象的所有軟引用都要保證在虛擬機拋出   OutOfMemoryError   之前已經(jīng)被清除。否則,清除軟引用的時間或者清除不同對象的一組此類引用的順序?qū)⒉皇苋魏渭s束。然而,虛擬機實現(xiàn)不鼓勵清除最近訪問或使用過的軟引用。   

此類的直接實例可用于實現(xiàn)簡單緩存;該類或其派生的子類還可用于更大型的數(shù)據(jù)結(jié)構(gòu),以實現(xiàn)更復(fù)雜的緩存。只要軟引用的指示對象是強可到達對象,即正在實際使用的對象,就不會清除軟引用。例如,通過保持最近使用的項的強指示對象,并由垃圾回收器決定是否放棄剩余的項,復(fù)雜的緩存可以防止放棄最近使用的項 

 

 

 

Java內(nèi)存管理之軟引用(Soft Reference)

 

軟引用 (Soft  Reference)的主要特點是具有較強的引用功能。只有當(dāng)內(nèi)存不夠的時候才回收這類內(nèi)存,因此在內(nèi)存足夠的時候,他們通常不被回收。另外,這些引用對象還能保證在Java  拋出OutOfMemory異常之前,被設(shè)置為null。他可以用于實現(xiàn)一些常用資源的緩存,實現(xiàn)Cache的功能,保證最大限度的使用內(nèi)存而不引起 OutOfMemory異常。

     下面是軟引用的實現(xiàn)代碼:

 

 

Java代碼  
  1. import java.lang.ref.SoftReference;  
  2. public class softReference  
  3.     public static void main(String[] args)  
  4.         new A();  
  5.         // 使用a  
  6.         a.test();  
  7.         // 使用完了a,將它設(shè)置為soft引用類型,并且釋放強引用  
  8.         SoftReference sr new SoftReference(a);  
  9.         null 
  10.         // 下次使用  
  11.         if (sr != null 
  12.             (A) sr.get();  
  13.             a.test();  
  14.         else  
  15.             // GC由于低內(nèi)存,已釋放a,因此需要重新裝載  
  16.             new A();  
  17.             a.test();  
  18.             null 
  19.             sr new SoftReference(a);  
  20.          
  21.      
  22.  
  23. class  
  24.     public void test()  
  25.         System.out.println("Soft Reference test");  
  26.      
  27.  
 

   軟引用技術(shù)的引進使Java應(yīng)用可以更好的管理內(nèi)存,穩(wěn)定系統(tǒng),防止系統(tǒng)內(nèi)存溢出,避免系統(tǒng)崩潰。因此在處理一些占用內(nèi)存大而且聲明周期較長,但使用并不頻繁的對象時應(yīng)盡量應(yīng)用該技術(shù)。但事物總帶有兩面性的,有利也有弊,在某些時候?qū)浺玫氖褂脮档蛻?yīng)用的運行效率與性能,例如:應(yīng)用軟引用的對象的初始化過程較為耗時,或者對象的狀態(tài)在程序的運行過程中發(fā)生了變化,都會給重新創(chuàng)建對象與初始化對象帶來不同程度的麻煩,有些時候我們要權(quán)衡利弊擇時應(yīng)用。

 

  

在android中可以巧妙的運用軟引用(SoftRefrence)(來源段落:http://winuxxan.blog.51cto.com/2779763/512180)

有些時候,我們使用Bitmap后沒有保留對它的引用,因此就無法調(diào)用Recycle函數(shù)。這時候巧妙的運用軟引用,可以使Bitmap在內(nèi)存快不足時得到有效的釋放。如下例:

 

Java代碼  
  1. private class MyAdapter extends BaseAdapter    
  2.   
  3. private ArrayList<SoftReference<Bitmap>> mBitmapRefs new ArrayList<SoftReference<Bitmap>>();    
  4. private ArrayList<Value> mValues;    
  5. private Context mContext;    
  6. private LayoutInflater mInflater;    
  7.   
  8. MyAdapter(Context context, ArrayList<Value> values)    
  9.     mContext context;    
  10.     mValues values;    
  11.     mInflater (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
  12.    
  13. public int getCount()    
  14.     return mValues.size();    
  15.    
  16.   
  17. public Object getItem(int i)    
  18.     return mValues.get(i);    
  19.    
  20.   
  21. public long getItemId(int i)    
  22.     return i;    
  23.    
  24.   
  25. public View getView(int i, View view, ViewGroup viewGroup)    
  26.     View newView null   
  27.     if(view != null   
  28.         newView view;    
  29.     else    
  30.         newView =(View)mInflater.inflate(R.layout.image_view, false);    
  31.        
  32.   
  33.     Bitmap bitmap BitmapFactory.decodeFile(mValues.get(i).fileName);    
  34.     mBitmapRefs.add(new SoftReference<Bitmap>(bitmap));     //此處加入ArrayList    
  35.     ((ImageView)newView).setImageBitmap(bitmap);    
  36.   
  37.     return newView;    
  38.    
  39.  
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java 如何有效地避免OOM:善于利用軟引用和弱引用
內(nèi)存優(yōu)化的兩個類:SoftReference 和 WeakReference,Java技術(shù)...
Java內(nèi)存泄露與解決
Java內(nèi)存泄露的理解與解決
Java對象的4種引用類型(轉(zhuǎn))
Java常見的四種引用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服