dalvik.vm 属性与android:largeHeap

阅读更多
dalvik.vm.heapstartsize=8m
相当于虚拟机的 -Xms配置,该项用来设置堆内存的初始大小。
dalvik.vm.heapgrowthlimit=192m
相当于虚拟机的 -XX:HeapGrowthLimit配置,该项用来设置一个标准的应用的最大堆内存大小。
一个标准的应用就是没有使用android:largeHeap的应用。
dalvik.vm.heapsize=512m
相当于虚拟机的 -Xmx配置,该项设置了使用android:largeHeap的应用的最大堆内存大小。
dalvik.vm.heaptargetutilization=0.75
相当于虚拟机的 -XX:HeapTargetUtilization,该项用来设置当前理想的堆内存利用率。其取值位于0与
1之间。当GC进行完垃圾回收之后,Dalvik的堆内存会进行相应的调整,
通常结果是当前存活的对象的大小与堆内存大小做除法,得到的值为这个选项的设置,即这里的0.75

dalvik.vm.heapminfree=4m与 dalvik.vm.heapmaxfree=8m
dalvik.vm.heapminfree对应的是-XX:HeapMinFree配置,用来设置单次堆内存调整的最小值。
dalvik.vm.heapmaxfree 对应的是-XX:HeapMaxFree配置,用来设置单次堆内存调整的最大值。
通常情况下,还需要结合上面的 -XX:HeapTargetUtilization的值,才能确定内存调整时,
需要调整的大小。

http://androidxref.com/8.0.0_r4/xref/frameworks/base/core/java/android/app/ActivityThread.java
        if ((data.appInfo.flags&ApplicationInfo.FLAG_LARGE_HEAP) != 0) {
            dalvik.system.VMRuntime.getRuntime().clearGrowthLimit();
        } else {
            // Small heap, clamp to the current growth limit and let the heap release
            // pages after the growth limit to the non growth limit capacity. b/18387825
            dalvik.system.VMRuntime.getRuntime().clampGrowthLimit();
        }

ApplicationInfo.FLAG_LARGE_HEAP就是对应android:largeHeap=true,进行了clearGrowthLimit

http://androidxref.com/8.0.0_r4/xref/frameworks/base/services/java/com/android/server/SystemServer.java
// Mmmmmm... more memory!
            VMRuntime.getRuntime().clearGrowthLimit();

            // The system server has to run all of the time, so it needs to be
            // as efficient as possible with its memory usage.
            VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);


你可能感兴趣的:(dalvik.vm 属性与android:largeHeap)