Java JVM、Android Dalvik与Android ART的区别,一篇就够了

Java JVM(虚拟机)

面试的时候有时会被问到为什么Java代码能够跨平台运行呢?

1、主要是因为Java有自己的运行环境就是JVM,Java的代码不是直接运行到电脑上的,而是在JVM(虚拟机)中运行。

2、不同的平台如Windows、Linux、Mac、只要安装了JVM,就可以在各个平台上运行起来。

3、Java将java文件编译成二进制字节码class文件,而JVM就执行class文件。

4、那么JVM是在什么时候安装的呢? 当安装JAVA的JDK的时候,JVM环境就安装了。

5、JVM原理这里不讲,可自行查找,这里主要讲Java JVM、Android Dalvik与Android ART的区别。

Android Dalvik(虚拟机)

1、在Android5.0之前,当应用程序安装到Android手机的时候,就会创建一个Dalvik(Android 虚拟机),代码运行在虚拟机中,用来隔离其它应用。Android是基于Linux内核的,除了创建Dalvik外,Linux内核会根据每一个应用创建一个UID和PID,一个应用只有一个UID(用户ID),但可以有多个PID(进程ID,在应用xml中设置process属性可以达到一个应用多个进程),进程之间是可以通信的,比如Binder通信。当一个APK安装到手机上的时候,是可以删除APK的,因为APK数据已经存储到手机系统中,在             

①system/app文件:  这系统自带的应用程序,无法删除;

           ②data/app文件:  用户程序安装的目录,有删除权限。

           ③data/data等等文件:  存放应用程序的数据

以上有些文件是需要root才能看到的

2、Dalvik与JVM区别:

①JVM是基于栈的执行的是class文件,Dalvik是基于寄存器的,执行特有的文件格式dex字节码。

②每个Android的App都是运行在一个独立的Dalvik,并且每一个 Dalvik应用作为一个独立的Linux进程执行

Android ART(虚拟机)

在Android5.0之后,Google就用ART来替换Dalvik,每安装一个App时,就会创建ART,而不是Dalvik。ART是Dalvik的升级版,ART有很多Dalvik的特性,但还是有些区别的:

1、ART与Dalvik区别:

①在Dalvik环境中,当启动一个应用的时候,每次运行都要将字节码转换为机器码,即每次都要编译加运行,这会拖慢应用的运行效率。而在ART 环境中,应用在第一次安装的时候,字节码就会预编译成机器码,虽然这会使APK安装时间变长,但每次启动app的时候,都可以直接运行,因此运行效率会提高。

②ART占用空间比Dalvik大,机器占用的存储空间比较大,字节码变为机器码之后,会增加10%-20%存储,这就是用“空间来换时间”。未来的手机存储肯定是越来越大,多些安装空间是没有什么问题的。

③每次应用程序启动,都可以不用再次编译,可以降低CPU使用频率和能耗。

 

以上是对Java JVM、Android Dalvik与Android ART区别的看法,若有错误,欢迎指出。

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Android)