电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Dalvik虚拟机垃圾收集过程分析

Dalvik虚拟机垃圾收集过程分析_第1页
1/59
Dalvik虚拟机垃圾收集过程分析_第2页
2/59
Dalvik虚拟机垃圾收集过程分析_第3页
3/59
下载后可任意编辑Dalvik 虚拟机垃圾收集(GC)过程分析前面我们分析了 Dalvik 虚拟机堆的创建过程,以及 Java 对象在堆上的分配过程。这些知识都是理解 Dalvik 虚拟机垃圾收集过程的基础。垃圾收集是一个复杂的过程,它要将那些不再被引用的对象进行回收。一方面要求 Dalvik 虚拟机能够标记出哪些对象是不再被引用的。另一方面要求 Dalvik 虚拟机尽快地回收内存,避开应用程序长时间停顿。本文就将详细分析 Dalvik 虚拟机是如何解决上述问题完成垃圾收集过程的。Dalvik 虚拟机使用 Mark-Sweep 算法来进行垃圾收集。顾名思义,Mark-Sweep 算法就是为Mark 和 Sweep 两个阶段进行垃圾回收。其中,Mark 阶段从根集(Root Set)开始,递归地标记出当前所有被引用的对象,而 Sweep 阶段负责回收那些没有被引用的对象。在分析Dalvik 虚拟机使用的 Mark-Sweep 算法之前,我们先来了解一下什么情况下会触发 GC。 Dalvik 虚拟机在三种情况下会触发四种类型的 GC。每一种类型 GC 使用一个 GcSpec结构体来描述,它的定义如下所示:[cpp] view plain copy 在 CODE 上查看代码片派生到我的代码片struct GcSpec { /* If true, only the application heap is threatened. */ bool isPartial; /* If true, the trace is run concurrently with the mutator. */ bool isConcurrent; /* Toggles for the soft reference clearing policy. */ bool doPreserve; /* A name for this garbage collection mode. */ const char *reason; }; 这个结构体定义在文件 dalvik/vm/alloc/Heap.h 中。 GcSpec 结构体的各个成员变量的含义如下所示: isPartial: 为 true 时,表示仅仅回收 Active 堆的垃圾;为 false 时,表示同时回收 Active堆和 Zygote 堆的垃圾。 isConcurrent: 为 true 时,表示执行并行 GC;为 false 时,表示执行非并行 GC。 doPreserve: 为 true 时,表示在执行 GC 的过程中,不回收软引用引用的对象;为 false时,表示在执行 GC 的过程中,回收软引用引用的对象。 reason: 一个描述性的字符串。 Davlik 虚拟机定义了四种类的 GC,如下所示:[cpp] view plain copy 在 CODE 上查看代码片派生到我的代码片下载后可任意编辑/* Not enough space for an "ordinary" Object to be allocated. */ extern c...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

Dalvik虚拟机垃圾收集过程分析

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部