28470 dalvikvm D GC_FOR_MALLOC freed 665 objects / 239992 bytes in 71ms
28470 dalvikvm D GC_FOR_MALLOC freed 673 objects / 240288 bytes in 87ms
21940 dalvikvm D GC_EXPLICIT freed 4802 objects / 185320 bytes in 78ms
28470 dalvikvm D GC_FOR_MALLOC freed 666 objects / 240536 bytes in 63ms
GC_FOR_MALLOC
means that the
GC was triggered because there wasn't enough memory left on the heap to
perform an allocation. Might be triggered when new objects are being
created.
GC_EXPLICIT
means that the garbage collector has
been explicitly asked to collect, instead of being triggered by high
water marks in the heap. Happens all over the place, but most likely
when a thread is being killed or when a binder communication is taken
down.
There are a few others as well:
GC_CONCURRENT
Triggered when the heap has reached a certain amount of objects to collect.
GC_EXTERNAL_ALLOC
means that the the VM is trying to
reduce the amount of memory used for collectable objects, to make room
for more non-collectable.
typedef enum {
/* Not enough space for an "ordinary" Object to be allocated. */
GC_FOR_MALLOC,
/* Automatic GC triggered by exceeding a heap occupancy threshold. */
GC_CONCURRENT,
/* Explicit GC via Runtime.gc(), VMRuntime.gc(), or SIGUSR1. */
GC_EXPLICIT,
/* GC to try to reduce heap footprint to allow more non-GC'ed memory. */
GC_EXTERNAL_ALLOC,
/* GC to dump heap contents to a file, only used under WITH_HPROF */
GC_HPROF_DUMP_HEAP
} GcReason;
Roughly speaking, the format is [Reason] [Amount Freed], [Heap Statistics], [External Memory Statistics], [Pause Time]
Reason
Robert/yuku already gave info on the meaning of these.
Amount Freed
E.g. freed 2125K
Self explanatory
Heap Statistics
E.g. 47% free 6214K/11719K
These numbers reflect conditions after the GC ran. The "47% free"
and 6214K reflect the current heap usage. The 11719K represents the
total heap size. From what I can tell, the heap can grow/shrink, so you
will not necessarily have an OutOfMemoryError if you hit this limit.
External Memory Statistics
E.g external 7142K/8400K
Note: This might only exist in pre-Honeycomb versions of Android (pre 3.0).
Before Honeycomb, bitmaps are allocated external to your VM (e.g.
Bitmap.createBitmap() allocates the bitmap externally and only allocates
a few dozen bytes on your local heap). Other examples of external
allocations are for java.nio.ByteBuffers.
Pause Time
If it's a concurrent GC event, there will be two times listed. One
is for a pause before the GC, one is for a pause when the GC is mostly
done.
E.g. paused 3ms+5ms
For non-concurrent GC events, there is only one pause time and it's typically much bigger.
E.g. paused 87ms
GC_EXTERNAL_ALLOC freed 297K, 49% free 3411K/6663K, external 24870K/26260K, paused 83ms
前面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。
Reference
:
http://stackoverflow.com/questions/4976566/what-do-gc-for-malloc-gc-explicit-and-other-gc-mean-in-android-logcat
http://stackoverflow.com/questions/4525743/what-are-the-paused-values-in-gc-concurrent-log-messages
http://hi.baidu.com/qmiao128/blog/item/69f2fa31d4a5d3b05fdf0ed2.html
分享到:
相关推荐
导语想写一篇关于androidGC的想法来源于追查一个魅族手机图片滑动卡顿问题,由于不断的GC导致的丢帧卡顿的问题让我们想了很多方案去解决,所以就打算详细的看看内存分配和GC的原理,为什么会不断的GC,GCALLOC和...
##Android GC机制实践调研 ================ 众所周知,java GC 是影响Android应用性能的主要因素之一。完全交给系统管理的GC往往不尽如人意,而开发者却也毫无办法,只能对着GC迎合啊迎合,想着办法把GC哄开心了呗~...
《深入解析Android GC0329驱动及其源码》 在Android系统中,硬件驱动是连接操作系统与硬件设备的关键桥梁,对于性能优化和系统稳定性起着至关重要的作用。GC0329是一款针对Android智能手机的图像传感器驱动,主要...
system.gc(); // 手动触发垃圾回收 } ``` 三、使用 Java 中的内存优化技术 在 Java 中,可以使用一些内存优化技术来减少内存的消耗。例如,可以使用软引用(SoftReference)来缓存图片,从而减少内存的消耗。 四...
Android GC原理探究https://www.jianshu.com/p/a7f31aee4e2e lowmemorykiller lowmemorykiller总结:https://www.jianshu.com/p/09922ab0390b oom 按照喜欢有两种情况: OOM(Out Of Memory) : Android内存管理机制...
标题中的"gc2035_yuv.zip_android_gc2035_gc2035_linux"暗示了这个压缩包文件是关于GC2035摄像头驱动的,特别针对Android智能手机,并且与Linux操作系统有关。GC2035是一款常见的图像传感器,常用于手机、监控摄像头...
在Android开发中,理解垃圾回收(Garbage Collection, GC)机制和如何进行程序优化至关重要,因为这直接影响到应用的性能和用户体验。Java语言内置的垃圾回收机制是自动管理内存的关键特性,它负责清理不再使用的...
文档的标签“Camera android gc0308”指的是文档中可能包含与Android操作系统、Camera模块以及型号为gc0308的相机传感器相关的信息。下面是根据文档提供的部分内容,整理出的详细知识点。 1. 调试Camera的目的: -...
《GC5035 MIPI RAW驱动在MTK平台Android 10.0上的实现与应用》 在当今的智能手机领域,图像传感器扮演着至关重要的角色。GC5035是一款广泛应用的CMOS图像传感器,尤其适用于摄像头模组。这款传感器以其高性价比和...
标题中的"gc0309_yuv.zip_GC0308_android"暗示了这是一个与Android智能手机相关的驱动程序,特别是针对MTK(MediaTek)芯片的图形处理部分。GC0308可能是摄像头传感器的型号,而gc0309可能指的是与其配合使用的图形...
即使打开开发者选项,允许调试等,在三星Galaxy EK-GC 100 android智能照相机上,仍然不能使用IDE的logcat,更不要想使用断点调试了,还好有这个apk来在相机上记录,不然要改bug,可得累死啊。更多关于调试三星...
【标题】"gc0310 mipi 驱动"是针对Android 4.4系统,基于MediaTek MT6572平台的一款摄像头驱动程序。MIP(Mobile Industry Processor Interface)I是移动设备中广泛使用的高速接口,主要用于连接摄像头传感器和其他...
R:\wyb\gc2145_bpi_a64_android\android\device\softwinner\bpi-m64-lcd\configs\camera.cfg ;------------------------------------------------------------------------------- ; 用于camera的配置 ; ; 采用格式:...
总之,gc0310前置摄像头驱动是连接高通msm8909平台硬件与Android系统的关键组件,涉及到了硬件接口、内核编程、设备树配置、以及Android相机框架等多个方面的技术知识。通过理解和调试这个驱动,开发者可以深入理解...
GC2155 CSP是一款由GalaxyCore Inc.生产的1/5’’ UXGA(Ultra Extended Graphics Array)CMOS图像传感器。UXGA是一种分辨率标准,它提供1600x1200像素的分辨率,这在高清晰度成像应用中非常常见,如监控摄像头、...
《GC2145 MIPI驱动详解:在MTK Android 4.4系统中的应用与配置》 在Android操作系统中,驱动程序是连接硬件设备与操作系统内核的关键桥梁,它们负责管理和优化硬件资源,使软件应用程序能够充分利用硬件功能。本文...
Java垃圾收集(Garbage Collection,简称GC)是Java编程中一个重要的特性,它负责自动管理内存,自动回收不再使用的对象,以避免程序员手动进行内存管理,防止内存泄漏。GC回收机制是Java虚拟机(JVM)的核心组成...
PL2303GC提供了一种方便的小型解决方案,用于将类似RS232的全双工异步串行设备连接到任何USB主机。 Prolific提供了高度兼容的驱动程序,该驱动程序可以在大多数操作系统上模拟传统的COM端口,从而允许基于COM端口的...