关于Android堆内存的设置

C/C++ code
      关于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. Delphi XE5 for Android(安卓)(十一)
  3. Android中改变Activity的不同icon:activity-alias
  4. android Notification 的使用
  5. Android(安卓)EditText常用属性功能汇总
  6. Android中保存并设置ListView位置
  7. Android(安卓)内存数据库
  8. Android设置透明、半透明等效果
  9. Android(安卓)App常用图标尺寸规范

随机推荐

  1. Android的按钮按下效果
  2. Android(安卓)GridView,Gallery动态更新数
  3. android sqllite dbhelper
  4. Android用悬浮按钮实现翻页效果
  5. Android(安卓)启动时闪一下黑屏问题的解
  6. android /proc/wake_lock
  7. Android(安卓)Shape制定圆形和圆环形状
  8. 【学习Android遇到的错误】关于Unable to
  9. 获取Android(安卓)Device的信息
  10. (64位)ubuntu 11.10编译android 2.3准备的