惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
Jina AI
Jina AI
雷峰网
雷峰网
博客园_首页
WordPress大学
WordPress大学
博客园 - 司徒正美
爱范儿
爱范儿
博客园 - 聂微东
IT之家
IT之家
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
博客园 - Franky
V
V2EX
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志

博客园 - jacktu

git 常用命令 请求处理常见tag语法 mysql执行group by提示only_full_group_by问题解决方法 go test命令(Go语言测试命令)完全攻略 mac下安装Homebrew提示Failed to connect to raw.githubusercontent.com port 443: Connection refused的解决办法【终极最简单版】 【转】Android类动态加载技术 Wireshark图解教程 asp.net 操作excel的一系列问题(未完待续) 不越狱无硬件,轻松搞定iPhone投影与录屏 Android 常见问题之Assets文件大小限制 会说话的TOM猫的原理是什么 【转】Android 3.1 r1 API中文文档(6)——ImageView android PorterDuffXfermode ,PorterDuff.Mode 使用 以及Porter-Duff规则详解 UIApplicationDelegate协议定义的方法说明 iPhone绘图关于QuartZ中绘制Line和虚线等 IOS开发网络篇之──ASIHTTPRequest详解 ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法) UILabel小结 【转】iPhone 模态对话框 立即返回结果
android GC
jacktu · 2012-01-10 · via 博客园 - jacktu

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://stackoverflow.com/questions/4525743/what-are-the-paused-values-in-gc-concurrent-log-messages