尊重原创作者,转载请注明出处:

http://blog.csdn.net/gemmem/article/details/12008005

dalvik/vm/Globals.java代码片段:


struct DvmGlobals {
    /*
     * Some options from the command line or environment.
     */
    char*       bootClassPathStr;
    char*       classPathStr;


    size_t      heapStartingSize;
    size_t      heapMaximumSize;
    size_t      heapGrowthLimit;

    size_t      stackSize;
    ................

    ................

    ................

heapStartingSize是进程启动时java heap的初始大小

heapMaximumSize的值必须大于heapGrowthLimit,当heapGrowthLimit值为0时,heapGrowthLimit就被赋值为heapMaximumSize。当Java堆对象总和达到heapGrowthLimit时,dalvik会抛出Error级别的异常,java app的主线程的DefaultUncaughtExceptionHandler会执行,弹出对话框提示app结束。

代码如下:dalvik/vm/alloc/Heap.cpp

/*
 * Initialize the GC heap.
 *
 * Returns true if successful, false otherwise.
 */
bool dvmHeapStartup()
{
    GcHeap *gcHeap;


    if (gDvm.heapGrowthLimit == 0) {
        gDvm.heapGrowthLimit = gDvm.heapMaximumSize;
    }



    gcHeap = dvmHeapSourceStartup(gDvm.heapStartingSize,
                                  gDvm.heapMaximumSize,
                                  gDvm.heapGrowthLimit);
    if (gcHeap == NULL) {
        return false;
    }

   .................

   .................

   .................

  dalvik.vm.heapsize这个property只对largeHeap的app起作用。当app的AndroidManifest.xml设置了大内存,heapGrowthLimit就不起作用了。

更多相关文章

  1. android典型代码系列(五)------deviceadmin步骤
  2. 用代码如何检测一个android程序是否在运行
  3. android典型代码系列(二)------sqlite数据库操作高级
  4. android 代码设置、打开/关闭wifi热点及热点的连接、状态查询监
  5. [置顶] Android输入法之——在代码中强制切换和获得当前输入法
  6. 代码中修改TextView的DrawableLeft图片
  7. Android简易音乐播放器实现代码
  8. java和Android文件下载断点续传和图片下载代码实现,可直接复制简

随机推荐

  1. 推送功能,(服务器向android客户端推送信息,
  2. Android 菜单(OptionMenu)
  3. android 笔记 02
  4. Android的StatusBar资料收集
  5. Android属性之build.prop生成过程
  6. 聊天室服务端
  7. Android(安卓)从缓存中读取图片并异步加
  8. Android利用Fiddler进行网络数据抓包
  9. Android存储访问及目录
  10. android 从驱动到应用(一)