这是我参与「第四届青训营 」笔记创作活动的第5天
今天汇总了有关ART课程的笔记,下面做一下回顾
ART,即Android Runtime,是是一种在Android操作系统上的运行环境,也称为android虚拟机,其构成结构如下图
可以看到,ART里面包含了许多模块,而要步入ART的大门,我们首先就要弄清楚两个问题。第一:对象在虚拟机内是怎么分配出来的;第二:虚拟机提供了哪些机制来使代码能高效顺利执行。
虚拟机的对象分配
在ART中,java对象的分配是直接托管到ART中的VM来处理的,不会直接向操作系统去申请,而实际上对OS内存的占用和内存布局,是通过VM控制的
对于android中的java对象,ART分别设计了不同的分配器进行内存的分配,这些分配器分别是TLAB,ROSallocator,LOSallocator。
在不同的应用场景下,ART会调用不同的分配器进行内存分配,就像课堂上老师举的买东西的例子
ART的内存分配基本原理,还是给使用者在最优的范围内找到一块大小符合的连续内存
虚拟机提供的使代码高校执行的机制
在ART中,主要提供了两种机制,以使代码能够高效执行,分别是垃圾回收机制GC和引用计数
垃圾回收机制(GC)
在ART中,触发GC一共有两种情况,一是没内存了,二是虚拟机觉得自己应该GC了 ,而虚拟机觉得自己该GC了,也取决于三个原因没具体如下图
ART的引用
对于ART的引用则主要分为三部分,强引用,弱引用和软引用,具体的区别和问题如下面两张图