学习自
https://blog.csdn.net/itachi85/article/details/72861179
JVM解释器基于栈
DVM解释器基于寄存器,速度快
JVM .java->.class->.jar
DVM .java->.class->.dex
DVM每一个进程都是一个虚拟机,一个进程crash不影响其他进程的工作
DVM由Zygote fork自身创建出子进程
DVM的运行时堆
Zygote Space里面包含在fork进程的时候,创建的各种对象,不会触发GC,所有进程共享
Allocation Space在zygote fork第一个子进程前创建的,在这里我们进行对象的分配释放
辅助数据结构:
card table记录垃圾信息
heap bitmap:有两种,第一种记录上次gc存活的对象,第二种记录这次gc存活的对象
mark stack:用来遍历存活的对象,与gc mark相关的算法有关
ART在应用安卓的时候,进行一次编译,把字节码编译成机器码,以后都使用机器码了。不像DVM需要每次编译
ART gc分Mark-Sweep GC和Compacting GC
如果采用的是Mark-Sweep GC,运行时堆主要是由四个Space和多个辅助数据结构组成,四个Space分别是Zygote Space、Allocation Space、Image Space(存放预加载类,也是进程共享的)和Large Object Space
除了这四个Space,ART的Java堆中还包括两个Mod Union Table,一个Card Table,两个Heap Bitmap,两个Object Map,以及三个Object Stack