Android性能:内存篇之Android虚拟机
在《Android性能:内存篇之虚拟机概论》中我们已经初步了解了JVM的结构基础与内存空间,,但是Android系统中的java虚拟机毕竟不是使用JVM,而是Delvik(Android系统5.0之前版本)与ART(Android4.4及之后版本),在《Android性能:内存篇之内存回收》对内存回收有了深入的了解,接下来我们详细聊聊Android虚拟机的内存回收机制及与虚拟机之间的关联。
一、Dalvik虚拟机
1. Delvik
Dalvik是Google公司自己设计用于Android平台的Java虚拟机,但它运行的不是 .class文件(java字节码),而是.dex文件(dex字节码)。 Dalvik虚拟机包含有一个解释器,用来执行dex字节码,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。
主流的大部分Davik采取的都是标注与清理(Mark and Sweep)回收算法,也有实现了拷贝GC算法的(具体算法看《Android性能:内存篇之内存回收》)。
2. 内存分配
Delvik中,内存分配实际上是对堆的分配和释放。当一个 Android 程序启动,应用进程都是从一个叫做 Zygote 的进程衍生出来,系统启动 Zygote 进程后,为了启动一个新的应用程序进程,系统会衍生 Zygote 进程生成一个新的进程,然后在新的进程中加载并运行应用程序的代码。其中,大多数的 RAM