JVM DVM ART初探

学习自

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

你可能感兴趣的:(JVM/DVM/ART)