85.JVM、Dalvik以及ART的区别

/**
* 每天一个知识点day85 TODO JVM、Dalvik以及ART的区别
*
* https://www.cnblogs.com/qitian1/p/6461541.html
* https://www.jianshu.com/p/59d98244fb52
*
* Dalvik
* Dalvik是Google公司自己设计用于Android平台的Java虚拟机。
* 它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,
* .dex格式是专为Dalvik应用设计的一种压缩格式,适合内存和处理器速度有限的系统。
* Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,
* 并且每一个Dalvik应用作为独立的Linux进程执行。
* 独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
*
* 特点:
* 1.Dalvik是依靠一个Just-In-Time(JIT编译)编译器去解释字节码
* 2.Dalvik虚拟机下运行Java时,要将字节码通过即时编译器(just in time ,JIT)转换
* 为机器码(机器码才是能真正运行的),这会拖慢应用的运行效率
* 3.应用安装时,执行dexopt指令,将dex文件优化为odex文件
* 4.应用运行时,会将二进制翻译成机器码流程
*
* ART
* ART代表AndroidRuntime,Dalvik是依靠一个Just-In-Time(JIT)编译器去解释字节码,
* 运行时编译后的应用代码都需要通过一个解释器在用户的设备上运行,
* 这一机制并不高效,但让应用能更容易在不同硬件和架构上运行。
* ART则完全改变了这种做法,在应用安装的时候就预编译字节码到机器语言,
* 这一机制叫Ahead-Of-Time(AOT)预编译。在移除解释代码这一过程后,
* 应用程序执行将更有效率,启动更快。
*
* 特点:
* AOT编译
* 应用安装时执行dex2oat指令,将dex文件翻译为oat文件
* 应用运行时,无二进制翻译为机器码流程
*
* JVM
* JVM(Java Virtual Machine)是一种软件实现,执行像物理程序的机器。
* JVM并是不专为Java所实现运行的,只要其他编程语言的编译器能生成Java字节码,
* 那这个语言也能实现在JVM上运行。因此,JVM通过执行Java bytecode可以使
* java代码在不改变的情况下在各种硬件之上。
*
* JVM和DVM区别:
* java虚拟机基于栈,基于栈的机器必须使用指令来载入和操作栈上数据
* Dalvik虚拟机基于寄存器
*
* java虚拟机运行的是java字节码
* Dalvik运行的是自己专属的.dex字节码格式
*
* JVM在运行的时候为每一个类装载字节码
* Dalvik程序只包含一个.dex文件,这个文件包含了程序中所有的类
*
* Dalvik与ART的区别:
* Dalvik每次都要编译再运行,Art只会首次启动编译
* Art占用空间比Dalvik大(原生代码占用的存储空间更大),就是用“空间换时间”
* Art减少编译,减少了CPU使用频率,使用明显改善电池续航
* Art应用启动更快、运行更快、体验更流畅、触感反馈更及时
*
*
*
*
*/

你可能感兴趣的:(85.JVM、Dalvik以及ART的区别)