dalvik是基于寄存器而不是堆栈的java虚拟机实现,可执行格式为.dex,该格式是经过优化的最小内存使用格式,首先通过java编译器把java文件编译成class文件,然后通过dx工具生成dex文件。
标准java环境会把每一个类都单独编译成一个class文件,而dx工具会把生成的class文件转换到一个dex文件内。
dalvik主要的内存优化设计思想就是对共享数据的处理:使用共享的特定类型常量池来集中存储常量并通过索引获取来代替把这些值遍布到所有class中。
因为每个应用都运行在自己的虚拟机实例中,所以必须做到快速启动和最小的内存使用,zygote应运而生。zygote是一个随系统启动的vm进程,它在启动时初始化一个dalvik vm,这个vm会预加载和预初始化一些核心类库,新的虚拟机实例会fork zygote实例,通常核心类库是共享并且只读的,所以新vm实例(新的子进程)与zygote共享zygote内存,直到子进程需要写内存操作,zygote内存将被拷贝到子进程空间,从而对子进程进行写操作。从而最大限度的减少了内存使用。