Android开发Eclipse中DDMS中Heap使用及GC_EXTERNAL_ALLOC含义

1、先说DDMS中的Heap的使用,经过能够观察VM中的Java内存,可是没法查看经过JNI分配的内存。
直接上图,废话少说。。。 java


图一:将要查看内存使用状况的项目Update heap shell

图二:操做项目,经过图表能够很直观查看虚拟机的使用内存
二:Android中GC_EXTERNAL_ALLOC的含义(转)
GC_EXTERNAL_ALLOC freed 297K, 49% free 3411K/6663K, external 24870K/26260K, paused 83ms
    free 3411K/6663K和external 24870K/26260K,分别都是表示     前面Free的内存是VM中java使用的内存,external是指VM中经过JNI中Native的类中的malloc分配出的内存,例如Bitmap和一些Cursor都是这么分配的。     在Davilk中,给一个程序分配的内存根据机型厂商的不一样,而不一样,如今的大部分的是32M了,而在VM内部会把这些内存分红java使用的内存和 Native使用的内存,它们之间是不能共享的,就是说当你的Native内存用完了,如今Java又有空闲的内存,这时Native会从新像VM申请,而不是直接使用java的。     例如上边的例子     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。
相关文章
相关标签/搜索