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,表示可用外部内存/外部内存总量paused2ms+2ms,第一个时间值表示markrootset的时间,第二个时间值表示第二次mark的时间。如果触发原因不是GC_CONCURRENT,这一行为单个时间值,表示垃圾收集的耗时时间。2.分析(1)虽然dalvikvm提供了一些调试信息,但是还缺乏一些关键信息,比如说mark和sweep的时间,分配内存失败时是因为分配多大的内存失败,还有对于SoftReference,WeakReference和PhantomReference的处理,每次垃圾收集处理了多少个这些引用等。(2)目前dalvik所有线程共享一个内存堆,这样在分配内存时必须在线程之间互斥,可以考虑为每个内存分配一个线程局部存储堆,一些小的内存分配可以直接从该堆中分配而无须互斥锁。(3)dalvik虚拟机中引入了concurrentmark,但是对于多核CPU,可以实现parrelmark,即可以使用多个线程同时运行mark阶段。这些都是目前dalvik虚拟机内存管理可以做出的改进。
分享到:
相关推荐
Android内存泄漏说明文件 英文 08-06 13:53:42.082: D/dalvikvm(12152): GC_CONCURRENT freed 1842K, 12% free 15412K/17399K, paused 1ms+3ms
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=...
D/dalvikvm( 52): GC freed 10588 objects / 425776 bytes in 94ms 其中W/I/D表示log的级别,“dalvikvm”“ARMAssembler”等是不同组件(component)的名称,后面括号里面的数字表示了发出log的进程号。 使用技巧...
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 –cp dex化jar路径 需要执行的主函数类完整类名 主函数参数主函数多个参数的空格隔开前置说明ANDROID_DATA默认为/data执行dalvikvm后需要生成一个dex文件存放在$ANDROID_DATA/dalvik-cache 目录下...
但是如果程序在一次操作中打开几个M的文件,那么通常会出现下面的错误信息。 02-04 21:46:08.703: ERROR/dalvikvm-heap(2429): 1920000-byte external allocation too large for this process
接下来轻微则Android系统开始结束后台任务来增加不断增加的堆内存问题,最后可能直接出现OOM,同时有时候GC还可能出现GC freed 0 objects / 0 bytes in 75ms这样的问题,对于Java的内存管理我们近期已经说到了,就...
An Introduction to the Android Framework, a core architecture view from apps to the kernel
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
环境没有Android运行时组件,因此某些功能将不可用(DalvikVM,OpenSLES等)。 如何使用 确保已安装并正在运行Docker。 git clone https://github.com/termux/termux-docker && cd ./termux-docker ./run.sh或./...
和谐2
� 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。 � 运营商(中国移动等)的大力支持,产业链条的热捧。 � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、...
代码如下: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的Dalvik VM
AndroidDalvikVMOverview_v1.0.0_201506031920.pdf
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 (解决
兼容ART和DalvikVM虚拟机,4.0-7.0,不会出现类似hotfix方案在art下虚拟机quick引用指针错乱造成的崩溃情况 补丁包动态生成,使用方式和RocooFix 一致,但某些功能待完善 Known issue 补丁打包速度待优化 有些未...
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
算法篇介绍了标记-清除算法、引用计数法、复制算法、标记-压缩算法、保守式GC、分代垃圾回收、增量式垃圾回收、RC Immix算法等几种重要的算法;实现篇介绍了垃圾回收在Python、DalvikVM、Rubinius、V8等几种语言处理...
使用DalvikVM在运行Android 4.4.4且允许SELinux设置为允许的Nexus 5上进行构建和测试。 目前,URLSniffer尚未经过ART的测试。 用法 它是一类,少于100行代码。 阅读它,或者不用担心。 修订记录 v1.0(初始发行版)...