Android記憶體溢出的解決方案(VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);

來源:互聯網
上載者:User

 

轉自:http://www.apkbus.com/forum.php?mod=viewthread&tid=898

模擬器上給gallery放入圖片的時候,出現java.lang.OutOfMemoryError: bitmap size exceeds VM budget 異常,映像大小超過了RAM記憶體。
模擬器RAM比較小,只有8M記憶體,當我放入的大量的圖片(每個100多K左右),就出現上面的原因。由於每張圖片先前是壓縮的情況。放入到Bitmap的時候,大小會變大,導致超出RAM記憶體,具體解決辦法如下:

Java代碼:

//解決載入圖片 記憶體溢出的問題
//Options 只儲存圖片尺寸大小,不儲存圖片到記憶體
BitmapFactory.Options opts = new BitmapFactory.Options();
//縮放的比例,縮放是很難按準備的比例進行縮放的,其值表明縮放的倍數,SDK中建議其值是2的指數值,值越大會導致圖片不清晰
opts.inSampleSize = 4;
Bitmap bmp = null;
bmp = BitmapFactory.decodeResource(getResources(), mImageIds[position],opts);
...
//回收
bmp.recycle();

通過上面的方式解決了,但是這並不是最完美的解決方式。
       通過一些瞭解,得知如下:

       最佳化Dalvik虛擬機器的堆記憶體配置

       對於Android平台來說,其託管層使用的Dalvik Java VM從目前的表現來看還有很多地方可以最佳化處理,比如我們在開發一些大型遊戲或耗資源的應用中可能考慮手動幹涉GC處理,使用
dalvik.system.VMRuntime類提供的setTargetHeapUtilization方法可以增強程式堆記憶體的處理效率。當然具體原理我們可以參考開源工程,這裡我們僅說下使用方法:
private final static float TARGET_HEAP_UTILIZATION = 0.75f;在程式onCreate時就可以調用VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION); 即可。

       Android堆記憶體也可自己定義大小

       對於一些Android項目,影響效能瓶頸的主要是Android自己記憶體管理機制問題,目前手機廠商對RAM都比較吝嗇,對於軟體的流暢性來說RAM對效能的影響十分敏感,除了 最佳化Dalvik虛擬機器的堆記憶體配置外,我們還可以強制定義自己軟體的堆記憶體大小,我們使用Dalvik提供的 dalvik.system.VMRuntime類來設定最小堆記憶體為例:

       private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;

       VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //設定最小heap記憶體為6MB大小。當然對於記憶體吃緊來說還可以通過手動幹涉GC去處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.