引言
前文我们普及了下关于GC的一些事, 对GC的一些个概念, 流程有个大概的了解. 在Application的启动流程一文中, 我们有提到, Android中每个App默认情况下是运行在一个独立进程中的, 而这个独立进程正是从Zygote孵化出来的VM进程. 也就是说, 每个App是运行在独立的VM空间的. 那么Android是怎么管理这些App的内存的呢, 这些独立运行的VM中的内存管理又是怎样的呢?
今天我们就来聊下Android中的内存管理.
1, Dalvik & ART
Android在4.4之前一直使用的Dalvik虚拟机作为App的运行VM的, 4.4中引入了ART作为开发者备选, 5.0起正式将ART作为默认VM了.
我们首先来简单了解下二者:
1.1 Dalvik
如果只是想简单了解, 个人觉得百度百科上这个Dalvik的介绍基本就满足要求了.
如果大家想深入, 可以看下老罗的Android之旅中Dalvik的相关博文, 从代码层面上分析了Dalvik的启动, 运行机制等. 值得一看.
需要说明的是, Dalvik采用的是JIT技术, 在应用程序启动时, JIT通过进行连续的性能分析来优化程序代码的执行, 在程序运行的过程中, Dalvik在不断的进行将字节码编译成机器码的工作.
1.2 ART
ART 取自 Android RunTime. Android用其取代Dalvik, 主要目的就是为了提升运行性能. 所以, ART相比Dalvik有几个关键的提升:
引入AOT(ahead-of-time)预编译技术
在安装apk的过程中, ART会使用dex2oat程序所有的字节码预编译成了机器码. 应用程序运行过程中无需进行实时的编译工作, 只需要进行直接调用. 故而提高了应用程序的运行效率.
GC效率
- 由原来的两次