Dalvik、ART、JVM

2016-11-14  本文已影响0人  windfall_

Dalvik虚拟机


dex文件

Java虚拟机运行的是java字节码,即class文件,而Dalvik虚拟机执行的是专有的dex格式字节码,dex文件是由一个或多个class文件打包而成。dex体积更小,class文件都有一个常量池,而dex文件只有一个常量池,多个class文件如果有重复的字符串,在dex文件里只有一份。
dex文件生成:

odex文件

Dalvik虚拟机的启动

在Android系统中,应用程序进程都是由Zygote进程孵化出来的,而Zygote进程是由Init进程启动的。Zygote进程在启动时会创建一个Dalvik虚拟机实例,每当它孵化一个新的应用程序进程时,都会将这个Dalvik虚拟机实例复制到新的应用程序进程里面去,从而使得每一个应用程序进程都有一个独立的Dalvik虚拟机实例。Zygote是虚拟机实例的孵化器。AndroidRuntime.cpp中ZygoteInit.main()的执行会完成一个分裂,分裂出来的子进程继续初始化Java层的架构,这个分裂出来的进程就是system_server。每当系统要求执行一个Android应用程序,Zygote就会fork出一个子进程来执行该应用程序。system_server是应用与Zygote之间交流的桥梁,通过socket进行通信。Android系统启动加载完内核后,第一个执行的是init进程,init进程首先要做的是设备的初始化工作,然后读取inic.rc文件并启动系统中的重要外部程序 Zygote。Zygote进程是Android所有进程的孵化器进程,它启动后会首先初始化Dalvik虚拟机,然后启动system_server并进入Zygote模式,通过socket等候命令。当执行一个Android应用程序时,system_server进程通过Binder IPC方式发送命令给Zygote,Zygote收到命令后通过fork自身创建一个Dalvik虚拟机的实例来执行应用程序的入口函数,这样一个程序就启动完成了。

Dalvik和Jvm之间的区别

Dalvik和ART的区别

Android Runtime,在android 5.0以后及后续版本取代Dalvik。

上一篇下一篇

猜你喜欢

热点阅读