Android dalvik GC相关的属性详解
来源:互联网 发布:在淘宝怎么才能买到烟 编辑:程序博客网 时间:2024/06/05 02:31
在dalvik中,GC的类型有三种:
1、GC_EXPLICIT:
应用主动调用System.gc()产生的GC事件。
2、GC_FOR_ALLOC:
内存分配时,发现可用内存不够时触发的GC事件。
3、GC_CONCURRENT:
给java层的class分配内存后,计算已分配的大小达到阈值(当前DVM heap size小一点)时会触发的GC事件。
因为第2和第3中GC是由系统触发的,所以应用是无法减少这两种类型的GC事件。但需要减少这两种GC事件是,可以通过配置dalvik的系统属性或者修改dalvik的GC算法来实现,本文只对修改dalvik的系统属性的方式进行介绍。
dalvik与GC相关的属性有:
dalvik.vm.heapstartsize:初始化dalvik分配的内存大小。
dalvik.vm.heapgrowthlimit:没有在mainfest中设置android:largeheap="true"时,应用的最大内存,超过这个值会有 OOM产生。
dalvik.vm.heapsize:在mainfest中设置android:largeheap="true"时,应用的最大内存,超过这个值会有OOM产生。
dalvik.vm.heaputilization、dalvik.vm.heapminfree 、dalvik.vm.heapmaxfree:dalvik GC时使用的参数。
dalvim GC策略是:
1.在一次GC后,根据当前Heap中已分配的内存大小除以dalvik.vm.heaputilization(0.75),得到一个目标值。
2.如果目标值不在(已分配的值+dalvik.vm.heapminfree)到(已分配的值+dalvik.vm.heapmaxfree)这个区间,即取区间边界值做为目标值(运行一段时间后第1步得到的目标值肯定会超过这个范围)。
3.虚拟机记录这个目标值,当做当前允许总的可以分配到的内存。同时根据目标值减去固定值(200~500K),当做触发GC_CONCURRENT事件的阈值。
4.当下一次分配内存,分配成功时。重新计算已分配的内存大小;若有达到GC_CONCURRENT的阈值,则产生GC。
5.当下一次分配内存,开始分配失败时。则会产生GC_FOR_ALLOC事件,释放内存;然后再尝试分配。
可以通过调整dalvik.vm.heapminfree 和dalvik.vm.heapmaxfree属性的值,减少GC_FOR_ALLOC和GC_CONCURRENT的次数,如果这两个值设置的过大,则会导致一次GC的时间过长,从而会看到明显的卡顿现象,设置的值既要使GC的次数减少,也不能是一次GC的时间过长。
在有的平台上,可以通过代码对单个应用的dalvik的属性进行设置,以减少对全局设置对系统的影响,可以再App里面通过如下的方式对当前的App的dalvik属性设置:
import dalvik.system.VMRuntime;import android.os.SystemProperties;...VMRuntime.getRuntime().setTargetHeapUtilization(0.75f);VMRuntime.getRuntime().setTargetHeapMinFree(2*1024*1024);VMRuntime.getRuntime().setTargetHeapConcurrentStart(8*1024*1024);...
如果想通过系统进行控制,也可以在framework里面的ActivityThread的handleBindApplication函数里面进行设置:
import dalvik.system.VMRuntime;import android.os.SystemProperties;import java.lang.*;...if( data.processName.equals("com.android.launcher")) {VMRuntime.getRuntime().setTargetHeapUtilization(0.75f); VMRuntime.getRuntime().setTargetHeapMinFree(2*1024*1024); VMRuntime.getRuntime().setTargetHeapConcurrentStart(8*1024*1024);}...
- Android dalvik GC相关的属性详解
- Android dalvik GC相关的属性详解
- 与dalvik GC相关的属性详解
- 与dalvik GC相关的属性详解
- android Dalvik GC
- Android虚拟机Dalvik Android的相关文件类型
- Android中Dalvik(DVM)的详解
- Android 5.0 ART GC 对比 Android 4.x Dalvik GC
- Android 5.0 ART GC 对比 Android 4.x Dalvik GC
- Android selector相关属性详解
- Dalvik与ART的GC调试
- Dalvik与ART的GC调试
- Dalvik和ART的GC区别
- Android Activity的属性及启动模式相关详解
- Android Activity的属性及启动模式相关详解
- screen的相关属性详解
- Shape的相关属性详解
- Android之TextView组件相关属性详解
- 给定一篇英文文章,找出其中使用频率最高的英语单词。
- TapGestureRecognizer的简单介绍
- activiti笔记
- UI 第六天 UISegmentControl UISlider UIImageView
- 递归调用--汉诺塔
- Android dalvik GC相关的属性详解
- 学习AngularJS的最强大资源集合
- Excel怎么将ABC字母表示的列号改成数字列号?
- RSA解密时javax.crypto.BadPaddingException: Data must start with zero
- 语音识别学习计划1.0
- 动态内存分配的一个小Demo
- CSS中的clear属性
- cocos2d-x学习笔记(4)精灵和菜单
- tcpdump 命令解析