关于Android堆内存的设置 [ 已编辑]
选项
将帖子标记为未读
将此主题添加到书签
订阅此主题
订阅此主题的 RSS 提要
高亮显示此贴
打印此贴
通过电子邮件将此主题发送给好友
举报此贴
修改时间 08-30-2010 12:21 AM 上次修改时间: 08-30-2010 10:26 AM

大家都知道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的时候调整堆内存大小,让实际占用率向个百分比靠拢。

更多相关文章

  1. Android(安卓)TextView 丰富多彩的字体样式代码
  2. Android(安卓)如何设置自定义dialog的大小
  3. Android自定义对话框(Dialog)位置,大小
  4. android从手机内存获得图片并全屏显示
  5. Android(安卓)如何获取系统字体大小
  6. Android(安卓)启动线程OOM
  7. android 內存等使用情況(转)
  8. Android文件下载进度条的实现
  9. Android缓存的引用

随机推荐

  1. 我的HTML INPUT无效标记,请帮忙
  2. java 使用htmlunit模拟登录爬取新浪微博
  3. 如何将jQuery输入掩码实现到@ Html.TextB
  4. 是否可以在两行中输出'submit'的值?
  5. 固定定位,父元素具有转换
  6. 49、html基础认识&常用标签(1)
  7. html5第十课时,简单的计算器
  8. [转]Html position(static、relative、abs
  9. 零基础HTML5游戏制作教程 第3章 图形的移
  10. MonoRail学习笔记十三:NVelocity的增强功