zoukankan      html  css  js  c++  java
  • 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的绝大多数操作在一个单独的线程中进行。

  • 相关阅读:
    ThinkPhp6.x+AntDesign+Vue前后端分离快速开发平台
    Laravel8.x+AntDesign+Vue前后端分离快速开发平台
    JavaWeb v1.0.0后台开发框架,专业版发布——细节完善,体验优化
    高并发情况下的DB重复插入解决方案随笔
    jQuery.qrcode.js客户端生成二维码,支持中文并且可以生成LOGO
    新能源车牌的问题
    OCR识别移动端的实现与应用
    在拥有vin码识别的时代,您还在傻乎乎手工录入吗?
    国内的车牌识别算法怎样选择
    一码在手运车无忧
  • 原文地址:https://www.cnblogs.com/androidsj/p/4560642.html
Copyright © 2011-2022 走看看