Android开发Eclipse中DDMS中Heap使用及GC_EXTERNAL_ALLOC含义
2015-12-09 15:49
274 查看
Android开发Eclipse中DDMS中Heap使用及GC_EXTERNAL_ALLOC含义
转载自:/article/8832754.html一、先说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。
相关文章推荐
- 【JavaWeb】之过滤器Filter
- JAVA中的final关键字用法实例详解
- [javase学习笔记]-2.1 关键字
- Java上传下载excel、解析Excel、生成Excel的问题
- 【开源】MQTT推送服务器——zer0MqttServer(Java编写)
- java.lang.NumberFormatException 错误及解决办法
- Java中的final关键字浅析
- Java中关于==与equals的理解
- Java回调机制
- JAVA中static方法的用法实例详解
- java爬虫之爬百度贴吧
- java中进行四舍五入
- 【java】HashMap的遍历
- JavaMail实现收发邮件(五)使用SSL实现加密传输
- 运用原生Java Api发送简单的Get请求、Post请求
- Java开发之File类
- JAVA代码规范
- WebService之Axis2快速入门: Spring与axis整合发布为WebService
- Java星期的复选运算
- java 压缩和解压lzo文件