`
fonter
  • 浏览: 869160 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GC_FOR_MALLOC

 
阅读更多

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.

 

 

typedefenum{ 
   
/* 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; 

 

 

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。

 

转至:http://hi.baidu.com/qmiao128/blog/item/69f2fa31d4a5d3b05fdf0ed2.html

 

分享到:
评论

相关推荐

    Dalvik虚拟机垃圾收集(GC)过程分析.docx

    GC_BEFORE_OOM : GC_FOR_MALLOC; // 实际的GC操作逻辑... } ``` 此函数接收一个布尔参数`clearSoftReferences`,决定是否清除软引用指向的对象。根据该参数的不同,选择合适的`GcSpec`实例,并执行相应的GC操作。...

    Android性能调优之内存泄露1

    * GC_FOR_MALLOC: 当应用程序需要分配更多内存,可是现有内存已经不足的时候,系统会进行GC操作来释放内存。 * GC_HPROF_DUMP_HEAP: 当生成HPROF文件的时候,系统会进行GC操作。 * GC_EXPLICIT: 这种情况就是我们...

    Dalvik虚拟机垃圾收集过程分析.doc

    1. **GC_FOR_MALLOC**:当试图分配新对象但内存不足时,会触发这种类型的GC。它主要针对应用程序堆(Active Heap)进行垃圾回收。 2. **GC_CONCURRENT**:当堆内存占用达到阈值时,系统会自动进行并发GC。这种GC...

    迷你垃圾回收器mini gc for c

    迷你垃圾回收器(Mini GC for C)是一种针对C语言实现的轻量级内存管理工具,主要功能是自动回收不再使用的内存,以防止内存泄漏。在C语言中,程序员需要手动管理内存分配和释放,而垃圾回收器则可以自动化这一过程...

    Android 如何使用log4j及注意事项

    11-23 09:44:56.947: D/dalvikvm(1585): GC_FOR_MALLOC freed 3278 objects / 311568 bytes in 31ms rejecting opcode 0x21 at 0x000a rejected Lorg/apache/log4j/config/PropertySetter;.getPropertyDescriptor ...

    GarbageCollectorC:C语言中GC的简单,多线程实现

    它允许用户使用类似于标准malloc和realloc函数的函数来分配内存,而不必担心丢失引用和内存泄漏。 GarbageCollector可以识别用户代码无法再访问的所有内存块,并对其进行重新分配。 这样做时,如果可执行文件在...

    net学习笔记及其他代码应用

    for (int j = i + 1 ; j ; j++) { if (array[j] ) { temp = array ; array = array[j] ; array[j] = temp ; } } } 9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引? 答:不是。可以用任意...

    sun公司java笔试题

    题目中提到了`goto`和`malloc`,这两个不是Java的关键字。`extends`是Java中的关键字,用于表示类的继承关系。`FALSE`不是一个Java关键字,正确的布尔常量是`false`。Java的关键字包括但不限于`abstract`, `assert`,...

    嵌入式linux工程师面试题目C语言基础部分.doc

    C语言没有内置的垃圾收集机制,程序员需要手动管理内存,使用`malloc()`和`free()`等函数分配和释放内存。 9. **其他C语言基础**: - 数据类型:C语言有基本类型(如int、char、float等)、结构体、枚举等。 - ...

    C语言题模拟题

    4. **流程控制语句**:包括条件语句(if-else,switch-case)、循环语句(for,while,do-while)以及跳转语句(break,continue)。这些语句用于控制程序的执行顺序。 5. **函数**:函数是C语言中的可重用代码块,...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **GC算法**:包括标记-清除、复制、标记-整理等算法。 - **垃圾回收器**:如Serial、ParNew、Parallel Scavenge等。 - **分代收集理论**:将内存划分为新生代和老年代,采用不同的回收策略。 #### 序列化 - **...

    计算机二级考试模拟软件(c语言)

    3. 控制结构:包括顺序结构、选择结构(if...else、switch...case)和循环结构(for、while、do...while)。 4. 函数:理解函数的定义、调用、参数传递,以及递归函数的使用。 5. 数组与指针:了解数组的声明、...

Global site tag (gtag.js) - Google Analytics