Heap使用及GC_EXTERNAL_ALLOC含义

转载 2012年03月23日 09:47:44

一、先说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


Android中GC_EXTERNAL_ALLOC的含义小结

经常在调试代码的时候,看到GC_EXTERNAL_ALLOC信息。 比如:GC_EXTERNAL_ALLOC freed 297K, 49% free 3411K/6663K, external 24...
  • cw2004100021124
  • cw2004100021124
  • 2014年01月16日 14:24
  • 488

你不知道的Eclipse用法:使用Heap检测和分析Android应用内存

Android Tools中的DDMS带有一个很不错的内存检测工具Heap。使用Heap检测应用进程使用内存情况步骤如下:  在Eclipse中安装和使用Heap步骤  Eclipse安...
  • p106786860
  • p106786860
  • 2013年07月04日 09:29
  • 10490

Android性能专项测试之Heap Viewer工具

参考文章:Heap Viewer  Android 内存监测工具 DDMS –> Heap  使用DDMS中的内存监测工具Heap来优化内存 Heap Viewer能做什么? 实时查看...
  • zhangfei2018
  • zhangfei2018
  • 2015年10月15日 16:39
  • 2867

stl中的heap使用

参加腾讯马拉松的时候,又一道题目需要用堆来维护数据,我居然不会用stl中的堆,只好到网上搜,真是往事不堪回首。。。 stl中的堆默认是最大堆,要想用最小堆的话,必须要在push_heap,pop_he...
  • lwfcgz
  • lwfcgz
  • 2013年04月04日 22:46
  • 7052

Heap内存分析工具和MAT 的使用

转自:http://blog.csdn.net/aaa2832/article/details/19419679/ 1 内存泄漏的排查方法 Dalvik Debug...
  • u010470383
  • u010470383
  • 2016年07月20日 09:49
  • 1214

JVM内存设置参数分析

引言:JVM提供了诸多的参数进行JVM各个方面内存大小的设置,为Java应用进行优化提供了诸多的工具,本文将会详细分析各个参数的功能与使用。...
  • blueheart20
  • blueheart20
  • 2016年08月02日 14:33
  • 2039

eclipse 里面heap 内存报告分析

无 论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方。 Android tools中的DDMS就带有一个很不错的内存监测工具Heap...
  • u011213711
  • u011213711
  • 2016年07月04日 14:12
  • 672

Heap Spray原理浅析

Heap Spray定义基本描述 Heap Spray并没有一个官方的正式定义,毕竟这是漏洞攻击技术的一部分。但是我们可以根据它的特点自己来简单总结一下。Heap Spray是在shellcode的...
  • QQ1084283172
  • QQ1084283172
  • 2015年08月05日 10:47
  • 1079

如何使用Heap Analyzer生成和分析IBM Java Heapdump?

IBM Java 和 Sun Java支持的第三方工具不太一样,在AIX 服务器上只能安装IBM JAVA,那么当我们运行的Java程序出现可疑的内存泄漏,该如何诊断呢? 一、什么是heapdump...
  • neu_lcj77
  • neu_lcj77
  • 2017年05月10日 17:29
  • 1458

STM32栈和堆使用不同RAM的实现方法

STM32栈和堆使用不同RAM实现的方法最近在调试将开源数据压缩算法zlib移植到STM32的工程中. 由于zlib要占用大量的动态内存(缺省设置下需要至少280kB左右的内存), STM32内部的4...
  • machael_sonic
  • machael_sonic
  • 2015年11月23日 19:36
  • 1933
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Heap使用及GC_EXTERNAL_ALLOC含义
举报原因:
原因补充:

(最多只允许输入30个字)