1. 程式人生 > >王立平--android out of memory(OOM)產生原因

王立平--android out of memory(OOM)產生原因

默認 -- out mic 產生 con 對象 native 單個

開發圖片視頻應用常遇到這個錯誤。


android 內存由 dalvik 和 native 2部分組成。dalvik 也就是 java 堆,創建的對象就是在這裏分配的,
而 native 是通過 c/c++ 方式申請的內存。
Bitmap 就是以一種方式分配的(android3.0 以後,系統默認是通過 dalvik 分配的)。當然不管以何種方式分
配,2部分加起來不能超過 android 對單個程序的內存限制。



1.一個進程的內存能夠由2個部分組成:java 使用內存 ,C 使用內存 ,這兩個內存的和必須小於16M。不然就會出現大


家熟悉的OOM,這個就是第一種OOM的情況。
2.更加奇怪的是這個:一旦內存分配給Java後。以後這塊內存即使釋放後。也僅僅能給Java的使用,這個預計跟java虛擬
機裏把內存分成好幾塊進行緩存的原因有關,反正C就別想用到這塊的內存了。所以假設Java突然占用了一個大塊內
存,即使非常快釋放了:
C能使用的內存 = 16M - Java某一瞬間占用的最大內存。


而Bitmap的生成是通過malloc進行內存分配的,占用的是C的內存,MBitmap無法生成的原
因。由於Java用的內存太多,剩下C能用的內存太少了。

王立平--android out of memory(OOM)產生原因