一、先说DDMS中的Heap的使用,通过它可以观察VM中的Java内存,但是无法查看通过JNI分配的内存
直接上图,废话少说。。。
图一:将要查看内存使用情况的项目Update heap
图二:操作项目,通过图表可以很直观查看虚拟机的使用内存
二:Android中GC_EXTERNAL_ALLOC的含义(转)
以下内容直接Ctrl C===》Ctrl V
问:
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。
所以现在我们要检查我们的native内存的使用情况来避免OOM。
总结:通过Heap可以查看到Java使用内存情况,但是无法查看JNI使用内存的情况,所以遇到内存溢出时,项目要是调用到动态库的,就留意一下通过JNI申请的内存是否合理释放。
转:http://blog.csdn.net/zzp16/article/details/6719809
分享到:
相关推荐
使用方法如下: 1.打开Android调试开关(需要userdebug版本) setenforce 0 setprop libc.debug.malloc 1 setprop libc.debug.malloc.options backtrace stop;start 2.获取进程pdi ps -ef | grep "app or service" 3....
Heap Datastructure made by C++
binary_heap_for_A_star
最近在学习STL的源代码,看到这么多优秀的代码,心里痒痒的,于是自己实现了一遍,当然,有自己的特色,都是模块函数,稍稍用了一些traits特性。相互学习,呵呵
Java Heap Solved Samples
(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下,默认: mysql> show variables like ...
GEN2_HEAP_SIZE_COUNTER_009_HELP=This counter displays the current number of bytes in generation 2 (Gen 2). Objects are not directly allocated in this generation; they are promoted from Gen 1 during ...
ion heap ion heap create for Linux v2.13.6.
Unity Heap Profiler
Windows consistency checks on the heap
drivers staging android ion ion_chunk_heap.
min_MAX Heap!! Algorithm
毕业设计、课程设计源码文件,已经过测试可以直接使用。毕业设计、课程设计源码文件,已经过测试可以直接使用。毕业设计、课程设计源码文件,已经过测试可以直接使用。毕业设计、课程设计源码文件,已经过测试可以...
core analyzer 2.16 source
用VC++实现test_heap_sort算法,程序可读性高,比较不错。
内容概要 For newbies 基础简介,环境搭建 SLUB 细节和特性 讨论内核 Heap Spray 两个实例 几种 spray 的实际应用
使用最小化堆实现一个整型的优先队列,实现下列功能: insert x,将优先级值为x的元素入队 find x,找出优先级值大于x的最小的元素,输出其下标。如果有多个元素优先级值相同输出下标最小的那个。 DECREASE i v,...