android 自定义堆,关于Android堆内存的设置.

原文

大家都懂得Android的上层利用是基于 Dalvik Virtual Machine的。Dalvik

VM的个性是基于储藏器,相比SUN的JVM(基于堆栈,未曾储藏器)来说,理论上告终同样的功能必需的号召条数少,然而号召集混杂。到了Android2.2,Dalvik终于告终了JIT(Just

In Time)功能,前进了一大步。

近期我们遭到OutOfMemory的讹谬,等闲是堆内存溢出。网上有些帖子说能够穿越函数设置利用的HEAP

SIZE来处理这个问题,其实是不对的。

VMRuntime.getRuntime().setMinimumHeapSize(NewSize);

堆(HEAP)是VM中挪借内存最多的局部,等闲是动态分配的。堆的大小不是原封不动的,等闲有一个分配机制来扼制它的大小。例如初始的HEAP是4M大,当4M的空间被挪借超过75%的时候,重新分配堆为8M大;当8M被挪借超过75%,分配堆为16M大。倒到来,当16M的堆利用不足30%的时候,收缩它的大小为8M大。重新设置堆的大小,尤其是收缩,等闲会波及到内存的拷贝,因而改变堆的大小对效率有不良波及。

上面只是个例子,不过能够看到三个参数:max heap size, min heap size, heap

utilization(堆利用率)。

Max Heap

Size,是堆内存的上限值,Android的缺省值是16M(某些机型是24M),对于等闲利用这是不能改的。函数setMinimumHeapSize其实只是改换了堆的下限值,它能够遏止过度频繁的堆内存分配,当设置最小堆内存大小超过上限值时依旧批准堆的上限值,对于内存不足没什么作用。

setTargetHeapUtilization(float newTarget)

能够设定内存利用率的百分比,当切实的利用率偏离这个百分比的时候,虚构时机在GC的时候调剂堆内存大小,让切实挪借率向个百分比靠拢。下面推荐的是对于java中经常揭示的一些讹谬的归纳。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值