Android 虚拟机 | 垃圾回收机制

点赞关注,不再迷路,你的支持对我意义重大!

Hi,我是丑丑。本文 「Android 路线」| 导读 —— 从零到无穷大 已收录,这里有 Android 进阶成长路线笔记 & 博客,欢迎跟着彭丑丑一起成长。(联系方式在 GitHub)


目录


前置知识

这篇文章的内容会涉及以下前置 / 相关知识,贴心的我都帮你准备好了,请享用~

  • Java 垃圾回收: Java 虚拟机 | 垃圾回收机制

1. Java 垃圾回收机制回顾

1.1 垃圾回收管理的区域

并不是 Java 虚拟机管理的所有区域都需要垃圾回收,线程独占的区域会随着线程结束而销毁,不需要垃圾回收。因此垃圾回收机制需要管理的区域是:

  • 堆: 垃圾对象;

  • 方法区: 废弃的常量和不再使用的类型。

1.2 分代收集模型

在实践中,当代绝大多数垃圾收集器都采用了 “分代收集模型”

—— 图片引用自网络

  • 1、新生代: 新生代中的对象存活率低,只要付出少量的赋值成本就能完成回收过程,因此选用复制算法;

  • 2、老生代: 老生代中的对象存活率高,并且没有额外空间进行分配担保,因此选用 “标记 - 清理” 或 “标记 - 整理” 算法。

1.3 并发回收

在标准的垃圾回收算法中,在垃圾回收线程进行标记 - 清理 / 整理 / 复制的过程中需要 stop-the-world,这是为了保证能够彻底清理所有垃圾对象。但是这种做法却会导致虚拟机的吞吐量降低。

在追求响应速度的系统上,希望垃圾收集器暂停时间尽可能小,为此发展出了允许回收线程与用户线程并发运行的垃圾收集器 —— CMS(并发标记清除)。主要工作过程分为 4 个步骤:

更多内容:Java 垃圾回收: Java 虚拟机 | 垃圾回收机制


2. Dalvik 上的垃圾回收


3. ART 上的垃圾回收

4. Dalvik 和 ART 虚拟机的垃圾回收方法

Dalvik与ART虚拟机的GC调试日志

JVM怎么保证gc效率跟线程运行效率的 ?


参考资料

  • 《深入探索 Android 内存优化(炼狱级别-下)》(第 7 节)—— JsonChao(平安)著
  • 《Android性能优化之内存优化》(第 1 节)—— JsonChao(平安)著
  • 《Dalvik与ART虚拟机的GC调试日志》 —— Gityuan(字节)著
  • 《Android上的 ART 虚拟机》 —— 强波(华为)著
  • 《Android上的 Dalvik 虚拟机》 —— 强波(华为)著

创作不易,你的「三连」是丑丑最大的动力,我们下次见!

你可能感兴趣的:(Android 虚拟机 | 垃圾回收机制)