(转)android dalvik heap 浅析

http://blog.csdn.net/cqupt_chen/article/details/11068129

-dalvik.vm.heapstartsize           
     堆分配的初始大小,调整这个值会影响到应用的流畅性和整体ram消耗。这个值越小,系统ram消耗越慢,
但是由于初始值较小,一些较大的应用需要扩张这个堆,从而引发gc和堆调整的策略,会应用反应更慢。
相反,这个值越大系统ram消耗越快,但是程序更流畅。
-dalvik.vm.heapgrowthlimit      
     受控情况下的极限堆(仅仅针对dalvik堆,不包括native堆)大小,dvm heap是可增长的,但是正常情况下
dvm heap的大小是不会超过dalvik.vm.heapgrowthlimit的值(非正常情况下面会详细说明)。这个值控制那
些受控应用的极限堆大小,如果受控的应用dvm heap size超过该值,则将引发oom(out of memory)。
-dalvik.vm.heapsize
    不受控情况下的极限堆大小,这个就是堆的最大值。不管它是不是受控的。这个值会影响非受控应用的dalvik
heap size。一旦dalvik heap size超过这个值,直接引发oom。

    用他们三者之间的关系做一个简单的比喻:分配dalvik heap就好像去食堂打饭,有人饭量大,要吃三碗,有人饭量小,连一碗都吃不完。如果食堂按照三碗的标准来给每个人打饭,那绝对是铺张浪费,所以食堂的策略就是先打一碗,凑合吃,不够了自己再来加,设定堆大小也是一样,先给一个合理值,凑合用,自己不够了再跟系统要。食堂毕竟是做买卖的,如果很多人明显吃不了那么多,硬是一碗接着一碗。为了制止这种不合理的现象,食堂又定了一个策略,一般人就只能吃三碗。但是如果虎背熊腰的大汉确实有需要,可以吃上五碗,超过五碗就不给了(太亏本了)。
开始给一碗                                            对应       dalvik.vm.heapstartsize
一般人最多吃三碗                                 对应       dalvik.vm.heapgrowthlimit
虎背熊腰的大汉最多能吃五碗              对应       dalvik.vm.heapsize
    在android开发中,如果要使用大堆。需要在manifest中指定android:largeHeap为true。这样dvm heap最大可达dalvik.vm.heapsize。

posted on 2015-08-05 18:16  Matrixin  阅读(449)  评论(0编辑  收藏  举报

导航