问题????
GC_EXTERNAL_ALLOC freed 1793K, 59% free 3312K/7943K, external 8616K/8616K, paused 54ms
原因:
上网查了下,类似语句:
GC_EXTERNAL_ALLOC freed 297K, 49% free 3411K/6663K, external 24870K/26260K, paused 83ms
牛人们解释如下:
前面Free的内存是VM中java使用的内存,这段的意思应该是:释放了297K,现在Free的内存是49%,已用的内存是3411,总得内存是6663.
external是指VM中通过JNI中Native的类中的malloc分配出的内存,例如Bitmap和一些Cursor都是这么分配的。
例如上边的例子
free 3411K/6663K和external 24870K/26260K
如果这时需要创建一个2M的Bitmap,Native现有内存26260-24870=1390K<2048k,因此他就会向Vm申请内存,虽然java空闲的内存是
6663-3411=3252>2048,但这部分内存Native是不能使用。
但是你现在去申请2M的Native内存,VM会告诉你无法分配的,因为现在已使用的内存已经接近峰值了32M(26260+6663=32923 ),所以现在就会成force close 报OOM。
所以现在我们要检查我们的native内存的使用情况来避免OOM。
参考网址:
http://topic.csdn.net/u/20110308/15/bc23ea40-8bca-47d8-9034-70c9d2538dae.html