Android中垃圾回收日志信息
原因
GC_CONCURRENTfreed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICITfreed 6K, 41% free 3667K/6151K, external 0K/0K, paused 29ms
红颜色标出的部分就是垃圾回收触发的原因。在Android中有五种类型的垃圾回收触发原因。
- GC_CONCURRENT当堆内存增长到一定程度时会触发。此时触发可以对堆中的没有用的对象及时进行回收,腾出空间供新的对象申请,避免进行不必要的增大堆内存的操作。
- GC_EXPLICIT当程序中调用System.gc()方法触发。这个方法应避免出现在程序中调用。因为JVM有足够的能力来控制垃圾回收。
- GC_EXTERNAL_MALLOC当Bitmap和NIO Direct ByteBuffer对象分配外部存储(机器内存,非Dalvik堆内存)触发。这个日志只有在2.3之前存在,从2.3系统开始,垃圾回收进行了调整,前面的对象都会存储到Dalivik堆内存中。所以在2.3系统之后,你就再也不会看到这种信息了。
- GC_FOR_MALLOC当堆内存已满,系统需要更多内存的时候触发。这条日志出现后意味着JVM要暂停你的程序进行垃圾回收操作。
- GC_HPROF_DUMP_HEAP当创建一个内存分析文件HPROF时触发。
结果
GC_CONCURRENTfreed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICITfreed 6K, 41% free 3667K/6151K, external 0K/0K, paused 29ms
这部分数据告诉我们JVM进行垃圾回收释放了多少空间。
堆内存数据
GC_CONCURRENT freed 178K,41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms
GC_EXPLICIT freed 6K,41% free 3667K/6151K, external 0K/0K, paused 29ms
这部分告诉我们堆内存中可用内存占的比例,当前活跃的对象总的空间,以及当前堆的总大小。所以这里的数据就是41%的堆内存可用,已经使用了3673K,总的堆内存大小为6151K。
外部存储数据
GC_EXTERNAL_ALLOC freed 1125K, 47% free 6310K/11847K,external 1051K/1103K, paused 46ms
GC_EXTERNAL_ALLOC freed 295K, 47% free 6335K/11847K,external 1613K/1651K, paused 41ms
这部分数据告诉我们外部存储(位于机器内存)对象的数据。在2.3之前,bitmap对象存放在机器内存。因此在第一条数据中我们可以看到以有1051K使用,外部存储为1103K。
上面两行数据相差100毫秒,我们可以看到第一条数据表明外部存储快满了,由于GC_EXTERNAL_ALLOC被触发,外部存储空间扩大到了1651K。
垃圾回收暂停时间
GC_CONCURRENT freed 178K, 41% free 3673K/6151K, external 0K/0K,paused 2ms+2ms
GC_EXPLICIT freed 6K, 41% free 3667K/6151K, external 0K/0K,paused 29ms
这部分数据表明垃圾回收消耗的时间。在GC_CONCURRENT回收时,你会发现两个暂停时间。一个是在回收开始的暂停时间,另一个时在回收结束的暂停时间。GC_CONCURRENT从2.3开始引入,相比之前的程序全部暂停的垃圾回收机制,它的暂停时间要小的多。一般少于5毫秒。因为GC_CONCURRENT的绝大多数操作在一个单独的线程中进行。
Android中垃圾回收日志信息相关推荐
- android 通知垃圾回收,Android中垃圾回收日志信息
原因 GC_CONCURRENTfreed 178K, 41% free 3673K/6151K, external 0K/0K, paused 2ms+2ms GC_EXPLICITfreed 6K ...
- Java垃圾回收日志解析
1.开启垃圾回收日志 在运行一个java程序时可以在命令行中加入相应的JVM垃圾回收参数,获取程序运行时详细的垃圾回收日志信息.以下是一些大概的参数: -XX:+PrintGC与-verbose:gc ...
- 想知道垃圾回收暂停的过程中发生了什么吗?查查垃圾回收日志就知道了!
\ 关键点 \ 垃圾回收日志中包括着一些关键性能指标: \ 要做一次正确的垃圾回收分析需要收集许多数据,所以好的工具是非常必要的: \ 除了垃圾回收之外还有很多事件都可能会让应用程序暂停: \ 让你的 ...
- Android中对Log日志文件的分析[转]
一,Bug出现了, 需要"干掉"它 bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只 ...
- Android中对Log日志文件的分析
Android中对Log日志文件的分析 如何分析和研究Log文件 ,如何看日志信息 Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没 ...
- 【android】垃圾回收机制
一般来说,程序使用内存的方式遵循先向操作系统申请一块内存,使用内存,使用完毕之后释放内存归还给操作系统.然而在传统的C/C++等要求显式释放内存的编程语言中,记得在合适的时候释放内存是一个很有难度的工 ...
- idea本地跑如何看gc日志_不可思议,竟然还有人不会查看GC垃圾回收日志?
日志的重要性,不需要过多强调了.通过日志,我们可以发现程序可能有内存(泄露)问题.本文从案例出发,具体介绍这些日志信息,以期帮助大家更好地了解垃圾回收的运行情况. 还是先上图,看看本文的主要内容: 我 ...
- 万字长文教你看懂java G1垃圾回收日志
文章目录 一.如何在idea打印G1日志 二.G1基础参数 三.G1新生代收集 1. 四个关键信息 2. 列出了新生代收集中并行收集的详细过程 3.列出了新生代GC中的一些任务: 4.包含一些扩展功能 ...
- Android ART 垃圾回收机制
平时有在看一些jvm的gc机制,但作为一名android开发者,竟然没有了解过android的垃圾回收机制,虽然android也是用java虚拟机跑app,但毕竟android用的是ART(5.0以后 ...
最新文章
- [转载]Emmet使用手册
- 非程序员如何使用 Git——版本控制你的生活
- python赋值字符串的切片_python基础知识之字符串
- 【Deep Learning】Tensorflow实现线性回归
- Android中加载事件的方式
- 数学--数论--质数处理
- Storm编程入门API系列之Storm的可靠性的ACK消息确认机制
- 云原生开发框架dapr环境搭建:CLI安装和初始化
- 7 Statistical estimation
- 运行shell脚本时怎么知道jdk路径_Shell写脚本关于ssh执行jar包,需要刷新JDK路径的问题...
- 没法再详细的说说Linux压缩与归档命令(下-2)
- 为什么rstudio打开是空白的_既然大家都说装了win10,就不用鲁大师监测显卡温度,为什么呢?...
- php 文件预览 水印,php实现在线预览word等office文件,同时添加水印
- matlab getdata函数,用getdata函数读取数据的时候数据读取不过来
- Unity 基础纹理
- linux上进行base64编码解码
- 自动驾驶常见英文缩写
- 递归实现费氏数列:0,1,1,2,3,5,8,13,21,34,55,89,... ...
- sublime配置go环境_如何为Sublime3配置Go语言开发环境
- [ACL2016]Pointing the Unknown Words