Android开发经验谈Android知识Android技术知识

JVM:关于那些 常见的垃圾收集器 学习指南

2018-10-23  本文已影响476人  Carson带你学安卓

前言

在接下来的日子,我会推出一系列讲解JVM的文章,具体如下;感兴趣可持续关注Carson_Ho的安卓开发笔记

示意图

垃圾收集器类型

垃圾收集器 类别

下面我会详细介绍。


1. Serial收集器

1.1 定义

最基本、发展历史最长的垃圾收集器

1.2 优点

暂停工作线程 是在用户不可见的情况下进行

注:并发 与 并行的区别
a. 并发:在 某一时段内,交替执行多个任务(即先处理A再处理B,循环该过程)
b. 并行:在 某一时刻内,同时执行多个任务(即同时处理A、B)

垃圾收集高效,即其他工作线程停顿时间短(可控制在100ms内),只要垃圾收集发生的频率不高,完全可以接受。

1.3 使用的垃圾收集算法

复制 算法

1.4 应用场景

客户端模式下,虚拟机的 新生代区域

1.5 工作流程

工作线程

2. Serial Old收集器

2.1 定义

Serial收集器 应用在老年代区域 的版本

2.2 优点

并发、单线程、效率高

Serial收集器,此处不作过多描述

2.3 使用的垃圾收集算法

标记-整理 算法

2.4 应用场景

2.5 工作流程

工作流程

3. ParNew 收集器

3.1 定义

Serial收集器 的 多线程 版本。

3.2 优点

暂停工作线程 是在用户不可见的情况下进行

由于存在线程交互的开销,所以在单CPU环境下,性能差于 Serial收集器

  1. 由于CMS收集器使用广泛,所以该特点非常重要。
  2. 关于CMS收集器 下面会详细说明

3.3 使用的垃圾收集算法

复制 算法

3.4 应用场景

服务器模式下,虚拟机的 新生代区域

多线程收集

3.5 工作流程

工作线程

4. Parallel Scavenge收集器

4.1 定义

ParNew 收集器的升级版

4.2 特点

  1. 吞吐量:CPU用于运行用户代码的时间 与 CPU总消耗时间(运行用户代码时间+垃圾收集时间)的比值
  2. 如:虚拟机总共运行100分钟,其中垃圾收集时间=1分钟、运行用户代码时间 = 99分钟,那吞吐量 = 99 / 100 = 99%
  1. 该特性称为:GC 自适应的调节策略
  2. 这是Parallel Scavenge收集器与 ParNew 收集器 最大的区别

4.3 使用的垃圾收集算法

复制 算法

4.4 应用场景

服务器模式下,虚拟机的 新生代区域

4.5 工作流程

工作流程

5. Parallel Old收集器

5.1 定义

Parallel Scavenge收集器 应用在老年代区域 的版本

5.2 特点

以达到 可控制吞吐量 为目标、自适应调节、多线程收集

Parallel Scavenge收集器

5.3 使用的垃圾收集算法

标记-整理 算法

5.4 应用场景

服务器模式下,虚拟机的 老年代区域

5.5 工作流程

工作流程

6. CMS收集器

6.1 定义

Concurrent Mark Sweep,基于 标记-清除算法的收集器

6.2 特点

6.2.1 优点

即在进行垃圾收集时,用户还能工作。

6.2.2 缺点

  1. 因为这一部分垃圾出现在标记过程之后,所以CMS无法在当次GC中处理掉它们
  2. 因此,CMS无法等到老年代被填满再进行Full GC,CMS需要预留一部分空间。即所谓的:可能出现Concurrent Mode Failure失败而导致另一次Full GC产生。

6.3 使用的垃圾收集算法

标记-清除 算法

6.4 应用场景

重视应用的响应速度、希望系统停顿时间最短的场景

如互联网移动端应用

6.5 工作流程

示意图 示意图

7. G1 收集器

7.1 定义

最新、技术最前沿的垃圾收集器

7.2 特点

即在进行垃圾收集时,用户还能工作

并发 & 并行 充分利用多CPU、多核环境下的硬件优势 来缩短 垃圾收集的停顿时间

  1. G1收集器除了将 Java 堆内存区域分为新生代 & 老年代之外,还会细分为许多个大小相等的独立区域( Region),然后G1收集器会跟踪每个 Region里的垃圾价值大小,并在后台维护一个列表;每次回收时,会根据允许的垃圾收集时间 优先回收价值最大的Region,从而避免了对整个Java堆内存区域进行垃圾收集,从而提高效率。
  2. 因为上述机制,G1收集器还能建立可预测的停顿时间模型:即让 使用者 明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得从超出N毫秒。即具备实时性

7.3 使用的垃圾收集算法

7.4 应用场景

服务器端虚拟机的内存区域(包括 新生代 & 老年代)

7.5 工作流程

示意图 示意图

8. 总结

示意图 示意图

请点赞!因为你的鼓励是我写作的最大动力!

相关文章阅读
Android开发:最全面、最易懂的Android屏幕适配解决方案
Android事件分发机制详解:史上最全面、最易懂
Android开发:史上最全的Android消息推送解决方案
Android开发:最全面、最易懂的Webview详解
Android开发:JSON简介及最全面解析方法!
Android四大组件:Service服务史上最全面解析
Android四大组件:BroadcastReceiver史上最全面解析


欢迎关注Carson_Ho的简书!

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度

上一篇下一篇

猜你喜欢

热点阅读