ART总结 | 青训营笔记

126 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第5天
今天汇总了有关ART课程的笔记,下面做一下回顾

ART,即Android Runtime,是是一种在Android操作系统上的运行环境,也称为android虚拟机,其构成结构如下图

image-20220810160319795.png 可以看到,ART里面包含了许多模块,而要步入ART的大门,我们首先就要弄清楚两个问题。第一:对象在虚拟机内是怎么分配出来的;第二:虚拟机提供了哪些机制来使代码能高效顺利执行。

虚拟机的对象分配

在ART中,java对象的分配是直接托管到ART中的VM来处理的,不会直接向操作系统去申请,而实际上对OS内存的占用和内存布局,是通过VM控制的

image.png

对于android中的java对象,ART分别设计了不同的分配器进行内存的分配,这些分配器分别是TLAB,ROSallocator,LOSallocator。

image-20220810161513235(1).png 在不同的应用场景下,ART会调用不同的分配器进行内存分配,就像课堂上老师举的买东西的例子

image.png ART的内存分配基本原理,还是给使用者在最优的范围内找到一块大小符合的连续内存

虚拟机提供的使代码高校执行的机制

在ART中,主要提供了两种机制,以使代码能够高效执行,分别是垃圾回收机制GC引用计数

垃圾回收机制(GC)

在ART中,触发GC一共有两种情况,一是没内存了,二是虚拟机觉得自己应该GC了 ,而虚拟机觉得自己该GC了,也取决于三个原因没具体如下图

image.png

ART的引用

对于ART的引用则主要分为三部分,强引用,弱引用和软引用,具体的区别和问题如下面两张图

image.png

image.png