android内存管理小结

来源:互联网 发布:百度自动营销软件 编辑:程序博客网 时间:2024/06/06 15:38
  • 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。

原创粉丝点击