可以在 manifest 中 application 节点设置 largeHeap = true 来增大 单个应用 最大可使用内存
参考:https://gold.xitu.io/entry/58476edaac502e006ce3fa7e
adb shell
cat /system/build.prop
这个文件路径是 /system/build.prop
,由于文件比较大,这里我们只截取关于dalvik内存的配置信息,如下。
dalvik.vm.heapstartsize=8m
dalvik.vm.heapgrowthlimit=192m
dalvik.vm.heapsize=512m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapminfree=2m
dalvik.vm.heapmaxfree=8m
上面有诸多配置,但从字面意思也不难理解,为了正确理解,有必要逐一解释一下。
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虚拟机也可以忽略此设置 。
dalvik.vm.heapminfree=2m 与 dalvik.vm.heapmaxfree=8m
dalvik.vm.heapminfree对应的是-XX:HeapMinFree配置,用来设置单次堆内存调整的最小值。 dalvik.vm.heapmaxfree 对应的是-XX:HeapMaxFree配置,用来设置单次堆内存调整的最大值。通常情况下,还需要结合上面的 -XX:HeapTargetUtilization的值,才能确定内存调整时,需要调整的大小。
Log.e("pengtao", "max memory = " + Runtime.getRuntime().maxMemory());Log.e("pengtao", "free memory = " + Runtime.getRuntime().freeMemory());Log.e("pengtao", "total memory = " + Runtime.getRuntime().totalMemory());ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);Log.e("pengtao", "memoryClass = " + Integer.toString(am.getMemoryClass()));Log.e("pengtao", "largememoryClass = " + Integer.toString(am.getLargeMemoryClass()));