- dalvik.vm.heapsize=16m
这个参数是指分配给一个虚拟机的最大堆内存。如系统每打开一个应用程序,就要为其分配一个虚拟机。可以通过getprop | grep dalvik.vm.heapsize查看此值。
栈(stack)与堆(heap),堆(HEAP)是VM中占用内存最多的部分,通常是动态分配的,存取速度比较慢。
两个options为java应用程序分配内存(jvm中进行的操作):
Xms - sets initial java heap size
Xmx - sets maximum java heap size
在/dalvik/vm/init.c下:
gDvm.heapSizeStart----内存堆初始申请大小
gDvm.heapSizeMax------dalvik内存堆申请最大不能超过,超过便导致OOM了。
堆的大小有一个分配机制来控制。比如初始的HEAP是4M大,当4M的空间被占用超过75%的时候,重新分配堆为8M大;当8M被占用超过75%,分配堆为16M大。倒过来,当16M的堆利用不足30%的时候,缩减它的大小为8M大。
heap空间完全由程序员控制,我们使用的malloc、C++ new和java new所申请的空间都是heap空间, C/C++申请的内存空间在native heap中,而java申请的内存空间则在dalvik heap中。所以dalvik.vm.heapsize不包括JNI申请的内存!也可以通过多开进程来增加程序可获得的RAM!
使用dumpsys meminfo + packagename/pid:可以看到程序占用的heap sizes。