点赞关注,不再迷路,你的支持对我意义重大!
🔥 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 虚拟机》 —— 强波(华为)著
创作不易,你的「三连」是丑丑最大的动力,我们下次见!
网友评论