android内存管理小结

本文详细介绍了Dalvik虚拟机中的堆内存管理机制,包括heapsize的设置及其动态调整原理,并解释了栈与堆的区别,以及如何通过命令查看当前应用的heap使用情况。
  • 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。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值