`
yanfaguanli
  • 浏览: 650671 次
文章分类
社区版块
存档分类
最新评论

内存调试的东西D/dalvikvm( 809 ): GC_CONCURRENT freed

 
阅读更多

1. verbosegc

一般Java虚拟机要求支持verbosegc选项,输出详细的垃圾收集调试信息。dalvik虚拟机很安静的接受verbosegc选项,然后什么都不做。dalvik虚拟机使用自己的一套LOG机制来输出调试信息。

如果在Linux下运行adb logcat命令,可以看到如下的输出:
D/dalvikvm( 745): GC_CONCURRENT
freed 199K, 53% free 3023K/6343K,external 0K/0K, paused 2ms+2ms

其中D/dalvikvm表示由dalvikvm输出的调试信息,括号后的数字代表dalvikvm所在进程的pid。

GC_CONCURRENT表示触发垃圾收集的原因,有以下几种:



  • GC_MALLOC, 内存分配失败时触发
  • GC_CONCURRENT,当分配的对象大小超过384K时触发
  • GC_EXPLICIT,对垃圾收集的显式调用(System.gc)
  • GC_EXTERNAL_ALLOC,外部内存分配失败时触发

freed 199K表示本次垃圾收集释放了199K的内存,

53% free 3023K/6343K,其中6343K表示当前内存总量,3023K表示可用内存,53%表示可用内存占总内存的比例。

external 0K/0K,表示可用外部内存/外部内存总量
paused
2ms+2ms,第一个时间值表示markrootset的时间,第二个时间值表示第二次mark的时间。如果触发原因不是GC_CONCURRENT,这一行为单个时间值,表示垃圾收集的耗时时间。

2.分析

(1)虽然dalvikvm提供了一些调试信息,但是还缺乏一些关键信息,比如说mark和sweep的时间,

分配内存失败时是因为分配多大的内存失败,还有对于SoftReference,WeakReference和PhantomReference的处理,每次垃圾收集处理了多少个这些引用等。

(2)目前dalvik所有线程共享一个内存堆,这样在分配内存时必须在线程之间互斥,可以考虑为每个内存分配一个线程局部存储堆,一些小的内存分配可以直接从该堆中分配而无须互斥锁。

(3)dalvik虚拟机中引入了concurrentmark,但是对于多核CPU,可以实现parrelmark,即可以使用多个线程同时运行mark阶段。

这些都是目前dalvik虚拟机内存管理可以做出的改进。
分享到:
评论

相关推荐

    Android内存泄漏信息介绍(英文)

    Android内存泄漏说明文件 英文 08-06 13:53:42.082: D/dalvikvm(12152): GC_CONCURRENT freed 1842K, 12% free 15412K/17399K, paused 1ms+3ms

    a20_hummingbird_v4.5_v1.0_csi01_2ov7670_rtl8188eus 20150918 1830 JNI.7z

    D/dalvikvm( 1849): GC_FOR_ALLOC freed 673K, 22% free 5143K/6512K, paused 41ms, total 47ms I/ActivityManager( 1670): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=...

    android logcat使用

    D/dalvikvm( 52): GC freed 10588 objects / 425776 bytes in 94ms 其中W/I/D表示log的级别,“dalvikvm”“ARMAssembler”等是不同组件(component)的名称,后面括号里面的数字表示了发出log的进程号。 使用技巧...

    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 ...

    Dalvikvm_pro:安卓 Dalvikvm

    核心:dalvikvm –cp dex化jar路径 需要执行的主函数类完整类名 主函数参数主函数多个参数的空格隔开前置说明ANDROID_DATA默认为/data执行dalvikvm后需要生成一个dex文件存放在$ANDROID_DATA/dalvik-cache 目录下...

    Android 内存溢出问题

    但是如果程序在一次操作中打开几个M的文件,那么通常会出现下面的错误信息。 02-04 21:46:08.703: ERROR/dalvikvm-heap(2429): 1920000-byte external allocation too large for this process

    Grow heap (frag case) 堆内存过大的深入解析

    接下来轻微则Android系统开始结束后台任务来增加不断增加的堆内存问题,最后可能直接出现OOM,同时有时候GC还可能出现GC freed 0 objects / 0 bytes in 75ms这样的问题,对于Java的内存管理我们近期已经说到了,就...

    An Introduction to the Android Framework

    An Introduction to the Android Framework, a core architecture view from apps to the kernel

    android的虚拟机dalvik源码-09年7月

    android的虚拟机dalvik源码: run-core-tests.sh Android.mk NOTICE MODULE_LICENSE_APACHE2 README.txt /libdex /libcore-disabled /dexopt /libcore /tools /tests .../dalvikvm /docs /dvz /vm /dx

    termux-docker:Termux环境打包为Docker映像

    环境没有Android运行时组件,因此某些功能将不可用(DalvikVM,OpenSLES等)。 如何使用 确保已安装并正在运行Docker。 git clone https://github.com/termux/termux-docker && cd ./termux-docker ./run.sh或./...

    harmonyos2-dalvik:DalvikVM-原始回购:https://android.googlesource.com/platfo

    和谐2

    新版Android开发教程.rar

    � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。 � 运营商(中国移动等)的大力支持,产业链条的热捧。 � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、...

    解析android res 运行错误的问题

    代码如下:W/ResourceType( 756): Failure getting entry for 0x7f020004 (t=1 e=4) in package 0: 0xffffffb1D/AndroidRuntime( 756): Shutting down VMW/dalvikvm( 756): threadid=1: thread exiting with ...

    Android-一个用于编译或运行代码生成的实用程序其目标是Android的DalvikVM

    一个用于编译或运行代码生成的实用程序,其目标是Android的Dalvik VM

    AndroidDalvikVMOverview

    AndroidDalvikVMOverview_v1.0.0_201506031920.pdf

    Android代码-一套新的热修复方案

    RocooFix Another hotfix framework update 新写了一个框架原理与美团robust框架...支持DalvikVM和ART VM 制作补丁更加方便 支持com.android.tools.build:gradle:1.3.0->com.android.tools.build:gradle:2.1.2 (解决

    Android代码-基于 InstantRun 实现的一个 Android 热修复方案

    兼容ART和DalvikVM虚拟机,4.0-7.0,不会出现类似hotfix方案在art下虚拟机quick引用指针错乱造成的崩溃情况 补丁包动态生成,使用方式和RocooFix 一致,但某些功能待完善 Known issue 补丁打包速度待优化 有些未...

    Android代码-DexHook

    Build and tested on Nexus 5 running Android 4.4.4 with SELinux set permissive, using DalvikVM. At this time, DexHook is untested with ART. Usage Its one class, less than 100 lines of code. Rea

    垃圾回收算法与实现——高清非扫描.pdf

    算法篇介绍了标记-清除算法、引用计数法、复制算法、标记-压缩算法、保守式GC、分代垃圾回收、增量式垃圾回收、RC Immix算法等几种重要的算法;实现篇介绍了垃圾回收在Python、DalvikVM、Rubinius、V8等几种语言处理...

    URLSniffer:简单的xposed模块,可从java.net.URL嗅探URL

    使用DalvikVM在运行Android 4.4.4且允许SELinux设置为允许的Nexus 5上进行构建和测试。 目前,URLSniffer尚未经过ART的测试。 用法 它是一类,少于100行代码。 阅读它,或者不用担心。 修订记录 v1.0(初始发行版)...

Global site tag (gtag.js) - Google Analytics