ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 低调看直播体育app软件下载 >> 移动开发 >> ART运行时Java堆创建过程分析

ART运行时Java堆创建过程分析(1/21)

来源:网络整理     时间:2015-12-20     关键词:require,计数器,Dalvik虚拟机

本篇文章主要介绍了"ART运行时Java堆创建过程分析",主要涉及到require,计数器,Dalvik虚拟机方面的内容,对于移动开发感兴趣的同学可以参考一下: 与Dalvik虚拟机一样,ART运行时内部也有一个Java堆,用来分配Java对象。当这些Java对象不再被使用时,ART运行时需要回收它们占...

        与Dalvik虚拟机一样,ART运行时内部也有一个Java堆,用来分配Java对象。当这些Java对象不再被使用时,ART运行时需要回收它们占用的内存。在前面一文中,我们简要介绍了ART运行时的垃圾收集机制,从中了解到ART运行时内部使用的Java堆是由四种Space以及各种辅助数据结构共同描述的。为了后面可以更好地分析ART运行时的垃圾收集机制,本文就对它内部使用的Java堆的创建过程进行分析。

老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注!

        ART运行时创建Java堆的过程,实际上就是创建在图1涉及到的各种数据结构:

ART运行时Java堆创建过程分析

图1 ART运行时堆的基本概念以及组成

        从图1可以看到,ART运行时内部使用的Java堆的主要组成包括Image Space、Zygote Space、Allocation Space和Large Object Space四个Space,两个Mod Union Table,一个Card Table,两个Heap Bitmap,两个Object Map,以及三个Object Stack。这些数据结构的介绍和作用可以参考前面ART运行时垃圾收集机制简要介绍和学习计划一文,接下来我们主要是分析它们的创建过程。

        从前面Android运行时ART加载OAT文件的过程分析一文可以知道,ART运行时内部使用的堆是在ART运行时初始化过程中创建的,即在Runtime类的成员函数Init中创建的,如下所示:

[cpp]  view plain copy ART运行时Java堆创建过程分析ART运行时Java堆创建过程分析

  1. bool Runtime::Init(const Options& raw_options, bool ignore_unrecognized) {    
  2.   ......    
  3.     
  4.   UniquePtr options(ParsedOptions::Create(raw_options, ignore_unrecognized));    
  5.   ......    
  6.     
  7.   heap_ = new gc::Heap(options->heap_initial_size_,    
  8.                        options->heap_growth_limit_,    
  9.                        options->heap_min_free_,    
  10.                        options->heap_max_free_,    
  11.                        options->heap_target_utilization_,    
  12.                        options->heap_maximum_size_,    
  13.                        options->image_,    
  14.                        options->is_concurrent_gc_enabled_,    
  15.                        options->parallel_gc_threads_,    
  16.                        options->conc_gc_threads_,    
  17.                        options->low_memory_mode_,    
  18.                        options->long_pause_log_threshold_,    
  19.                        options->long_gc_log_threshold_,    
  20.                        options->ignore_max_footprint_);    
  21.    
  22.   ......    
  23. }  
       这个函数定义在文件art/runtime/runtime.cc中。

       Runtime类的成员函数Init首先是调用ParsedOptions类的静态成员函数Create解析ART运行时的启动选项,并且保存在变量options指向的一个ParsedOptions对象的各个成员变量中,与堆相关的各个选项的含义如下所示:

       1. options->heap_initial_size_: 堆的初始大小,通过选项-Xms指定。

       2. options->heap_growth_limit_: 堆允许增长的上限值,这是堆的一个软上限值,通过选项-XX:HeapGrowthLimit指定。

       3. options->heap_min_free_: 堆的最小空闲值,通过选项-XX:HeapMinFree指定。

       4. options->heap_max_free_: 堆的最大空闲值,通过选项-XX:HeapMaxFree指定。

       5. options->heap_target_utilization_: 堆的目标利用率,通过选项-XX:HeapTargetUtilization指定。

       6. options->heap_maximum_size_: 堆的最大值,这是堆的一个硬上限值,通过选项-Xmx指定。

相关图片

相关文章