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开发Eclipse中DDMS中Heap使用及GC_EXTERNAL_ALLOC含义

一、先说DDMS中的Heap的使用,通过可以观察VM中的Java内存,但是无法查看通过JNI分配的内存。 直接上图,废话少说。。。 图一:将要查看内存使用情况的项目Update...

Heap使用及GC_EXTERNAL_ALLOC含义

一、先说DDMS中的Heap的使用,通过它可以观察VM中的Java内存,但是无法查看通过JNI分配的内存 直接上图,废话少说。。。 图一:将要查看内存使用情况的项目Update heap ...
  • zzp16
  • zzp16
  • 2011年08月25日 21:50
  • 2947

理解Stack、Heap并深入实现ObjC中alloc、retain、release与dealloc方法

Stack
  • Dan_163
  • Dan_163
  • 2014年08月08日 10:14
  • 899

spark出现GC overhead limit exceeded和java heap space

spark执行任务时出现java.lang.OutOfMemoryError: GC overhead limit exceeded和java.lang.OutOfMemoryError: java ...

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC,提搞程序性能

虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的...

GC_FOR_MALLOC 含义

http://hi.baidu.com/qmiao128/blog/item/69f2fa31d4a5d3b05fdf0ed2.html GC_FOR_MALLOC ...
  • kwensen
  • kwensen
  • 2012年05月11日 16:43
  • 293

Java -verbose:gc 命令详解 JVM参数以及其含义

-Xms2g:JVM启动初始化堆大小为2g,Xms的默认是物理内存的1/64但小于1G。 -Xmx2g:JVM最大的堆大小为2g,Xmx默认是物理内存的1/4但小于1G;将-Xms和-Xmx的值...
  • jyxmust
  • jyxmust
  • 2017年06月25日 23:42
  • 549

GC ROOT的真实含义

作者:RednaxelaFX 链接:https://www.zhihu.com/question/53613423/answer/135743258 来源:知乎 著作权归作者所有,转载请联系作者...

使用_CRTDBG_MAP_ALLOC宏与_malloca/_freea不兼容

环境:VC2005  + WTL 8.1   为了定位内存漏洞,在头文件中包含了crtdbg.h,   #if defined(_DEBUG) #define _CRTDBG_MAP_ALLO...

Meshlab中IO插件编写_使用自已添加的external支持库

一、使用在external中自定义添加的第三方库,如何添加请参考: http://blog.csdn.net/fightingbull/article/details/8143796   对于第...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Heap使用及GC_EXTERNAL_ALLOC含义
举报原因:
原因补充:

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