GC_EXTERNAL_ALLOC freed 与 GC_EXPLICIT freed 是什么?

简介:

09-28 17:16:37.543: DEBUG/dalvikvm(21466): GC_EXTERNAL_ALLOC freed 390 objects / 45656 bytes in 50ms
09-28 17:16:40.513: DEBUG/dalvikvm(3267): GC_EXPLICIT freed 4501 objects / 251624 bytes in 67ms

很多做开发的朋友不明白上面这句是什么意思,给大家解释一下! 

前面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。



本文转自java豆子博客园博客,原文链接:http://www.cnblogs.com/error404/archive/2011/09/28/2194708.html,如需转载请自行联系原作者

相关文章
|
22天前
|
Java Python
gc模块的set_threshold函数
gc模块的set_threshold函数
|
1月前
|
Rust 编译器
|
存储 算法 Java
CMS 触发GC(Allocation Failure)解析
针对GC中发生的"Allocation Failure"
826 0
|
安全 Java 编译器
JVM - 解读GC中的 Safe Point & Safe Region
JVM - 解读GC中的 Safe Point & Safe Region
168 0
|
存储 SQL 算法
彻底理解对象内存分配及Minor GC和Full GC全过程
某数据计算系统,日处理亿级数据量。系统不断从各种数据源提读数据,加载到JVM内存进行计算处理
270 0
|
存储 缓存 算法
JVM学习(三):聊聊内存泄漏(memory leak)
可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否还被引用。那么对于这种情况下,由于代码的实现不同就会出现很多种内存泄漏问题(让JVM误以为此对象还在引用中,无法回收,造成内存泄漏)。
344 0
JVM学习(三):聊聊内存泄漏(memory leak)
|
算法 Java
【JVM原理探索】彻底弄清楚Minor GC和Major GC及Full GC
【JVM原理探索】彻底弄清楚Minor GC和Major GC及Full GC
638 0
【JVM原理探索】彻底弄清楚Minor GC和Major GC及Full GC
|
算法 Java
Minor GC 和 Full GC 有什么不同
Minor GC 和 Full GC 有什么不同
188 0
JVM 报 GC Overhead limit exceeded 是什么意思?
JVM 报 GC Overhead limit exceeded 是什么意思?