1、JVM是什么?
JVM是Java Virtual Machine
JVM本质是软件,是计算机硬件的一层软件抽象,屏蔽了底层实现的差异
Java编译的程序会生成JVM字节码,字节码需要通过JVM被翻译成机器指令
JVM本质作用是将平台无关的.class内的字节码翻译成平台相关的机器码-实现跨平台
2、Dalvik虚拟机(DVM)是什么
是android中使用的虚拟机。所有的Android程序都运行在Android系统进程中,每个进程都对应一个Dalvik虚拟机实例
DVM和JVM都提供了对象生命周期管理、堆栈管理、线程管理、安全和异常管理以及垃圾回收等重要功能
3、DVM和JVM的区别
JVM运行的是JAVA字节码,通过解释class中内容来运行程序。
DVK运行的是Dalvik字节码, 均由Java字节码转换而来,并都被打包到DEX(Dalvik Executable)执行文件,DVM通过解释DEX文件来执行这些字节码.
JVM生成的class文件,每个class文件都会有一个常量池,会导致信息冗余。体积过大。
DVM生成的Dex文件共享一个常量池能减少体积。
JAVA虚拟机基于栈结构,程序在运行时虚拟机需要频繁的从栈上读取写入数据,这个过程需要更多的指令分派与内存访问次数,会耗费很多CPU时间。
Dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式要快很多。
4、JIT(Just in time)和AOT(Ahead of time)是什么?
Just In Time,即时编译技术
Ahead Of Time,预编译技术
JVM的做法是将字节码逐条解释翻译,比C/C++编译的可执行二进制字节码程序慢。通过JIT会将一些方法编译成对引得汇编代码,存储起来,以后调用的时候不需要解释可以直接运行。(Dalvik虚拟机在2.2中增加了JIT)
AOT就是指C/C++这类语言,编译器在编译时直接将程序源码编译成目标机器码,运行时直接运行机器码。
5、DVM和ART(Android Runtime)虚拟机的区别与联系
Dalvik虚拟机执行的是dex字节码,ART虚拟机执行的是本地机器码
DVM原理:依靠JIT编译器去解释执行,运行时动态地将执行频率很高的dex字节码翻译成本地机器码然后在执行,但是将dex字节码翻译成本地机器码是发生在应用程序的运行过程中,并且应用程序每一次重新运行的时候,都要重新做这个翻译工作.
ART原理:应用程序仍然是一个包含dex字节码的apk文件。在安装应用的时候,dex中的字节码将被编译成本地机器码,之后每次打开应用,执行的都是本地机器码。移除了运行时的解释执行,效率更高,启动更快。(安卓在4.4中发布了ART运行时)
6、ART的优点
系统性能显著提升
应用启动更快、运行更快、体验更流畅、触感反馈更及时
续航能力提升
支持更低的硬件
7、ART的缺点
更大的存储空间占用,可能增加10%-20%
更长的应用安装时间