JVM Davilk ART 简介 区别
JVM和DVM
JavaSE 程序使用的虚拟机叫 Java Virtual Machine,简称 JVM。Android 平台虽然是使用java语言来开发应用程序,但Android程序却不是运行在标准java虚拟机上的,谷歌专门为Android平台设计了一套虚拟机来运行Android程序,它就是Dalvik虚拟机。Dalvik虚拟机执行的是已转换为 .dex(即 Dalvik Executable)格式的 Java 应用程序,.dex 格式是专为 Dalvik 设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik 应用作为一 个独立的 Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。Dalvik虚拟机的特点
- 体积小,占用内存空间小。
- 专有的DEX可执行文件格式,体积更小,执行速度更快。
- 常量池采用32位索引值,寻址类方法名、字段名、常量更快。
- 基于寄存器架构,基于寄存器的虚拟机对于编译后变大的程序来说,在它们执行的时候,花费的时间更短。
- 提供了对象生命周期管理、堆栈管理、线程管理、安全和异常管理以及垃圾回收等重要功能。
- 所有的Android程序都运行在Android系统进程里,每个进程对应着一个Dalvik虚拟机实例。
Dalvik虚拟机的一些细节
- Dalvik 主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等重要功能;
- Dalvik 负责进程隔离和线程管理,每一个 Android 应用在底层都会对应一个独立的 Dalvik 虚拟机实例,其代码在虚拟机的解释下得以执行;
- 不同于 Java 虚拟机运行 Java 字节码,Dalvik 虚拟机运行的是其专有的文件格式 Dex;
- dex 文件格式可以减少整体文件尺寸,提高 I/O 操作的类查找速度;
- odex 是为了在运行过程中进一步提高性能,对 dex 文件的进一步优化;
- 所有的 Android 应用的线程都对应一个 Linux 线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制;
- 有一个特殊的虚拟机进程 Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生, 它会完成虚拟机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和 Zygote 共享一 块内存区域;
- Dalvik 是由 DanBornstein 编写的,名字来源于他的祖先曾经居住过名叫 Dalvík 的小渔村,村子位于冰岛。
Davilk产生背景
- 首先,Dalvik VM获取生成的Java类文件,将它们组合为一个或多个Dalvik可执行文件(.dex)。它重用多个类文件中的重复信息,与未压缩的传统.jar文件相比,有效地将空间需求减少了一半。
- 其次,Google公司在Dalvik VM中对垃圾收集进行了调优,但它在早期版本中选择了删除java经典的JIT(Just-In-Time,即时)编译器。后来,Android 2.3添加了JIT.报告称这可在各种场所提供快2到5倍的原始性能,将通用应用程序的性能提升10%-20%。
- 最后,Dalvik VM使用了一种不同的汇编代码生成方法,它使用寄存器而不是栈作为主要的数据存储单元。Google公司希望这样能将指令减少到30%。应当指出,采用Dalvik VM的一个结果是,Android中最终的可执行程序代码不是基于Java字节码,而是基于.dex文件。这意味着无法直接执行Java字节码,必须首先得到Java类文件,然后将它们转换为可链接的.dex文件。
ART简介
- DVM:实时。每次运行应用的时候,实时将字节码转化为机器码,再运行程序。中间多了一道转换手续,使得程序响应需要更多的时间,因为实时,消耗了更多的电量,内存。(这就是相同配置的手机Android不如Apple流畅的原因。)
- ART:安装时。在安装应用的时候,就将应用的字节码转换为机器码,保存在手机里。每次运行应用的时候,无需实时转换,直接使用转换好的机器码。打开应用更快,应用响应更及时,内存占用,电量消耗都减少。(拉近了与Apple的流畅距离)
- 1、系统性能的显著提升。
- 2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。
- 3、更长的电池续航能力。
- 4、支持更低的硬件。
- 1、更大的存储空间占用,可能会增加10%-20%。
- 2、更长的应用安装时间。
ART模式
ART 模式英文全称为:AndroidRunTime,谷歌从 Android4.4 系统开始新增的一种应用运行模式, 与传统的 Dalvik 模式不同,ART 模式可以实现更为流畅的 Android 系统体验。在 4.4 系统之前,Android 系统在 Linux 的底层下构筑 Dalvik 一层的虚拟机,通过其可以更好适应多样的硬件架构,开发者只需要按一套规则进行应用便可,无需因为不同的硬件架构而处理与底层的驱动关系,从而大大提高开发的效率,但因为应用均是运行在 Dalvik 虚拟机中,因此应用程序每次运行的时候,一部分代码都需要重新进行编译,这过程需要消耗一定的时间和降低应用的执行效率, 最明显的便是拖延了应用的启动时间和降低了运行速度。 ART模式有什么作用? ART 模式最大的作用就是提升了 Android 系统流畅度,相比 Dalvik 模式中出现的耗电快、占用内存大、即使是旗舰机用久了也会卡顿严重等现象,ART模式中这种问题得到了很好的解决,通过在安装应用程序时,自动对程序进行代码预读取编译,让程序直接编译成机器语言,免去了 Dalvik 模式要实时转换代码,实现高效率、省电、占用更低的系统内存、手机运行流畅。ART模式的缺点同一款应用安装后比DVM占更多的空间,多出的空间用来保存机器码了,安装时间也更长点。一个应用里代码的大小是很小的,大都是资源素材大,因而多出的空间是很小的,现在手机都是16G+,不影响使用。JIT与AOT
Android2.3版本提供了JIT机制提升性能,JIT(Just-In-Time),用来在运行时动态地将执行频率很高的dex字节码编译成本地机器码,然后再执行。通过JIT,就可以有效地提高Dalvik虚拟机的执行效率。但是,应用每次运行的时候,部分字节码都需要通过JIT转换为机器码,降低了应用程序运行效率。而ART则是使用AOT(Ahead-Of-Time)进行处理,所谓AOT是指在运行以前就把中间代码静态编译成本地代码,这就减去了JIT运行时的转换时间。因此,即使Dalvik采用了JIT,Dalvik总体性能还是不能与直接执行本地机器码的ART虚拟机相比。
JVM Davilk ART 简介 区别的更多相关文章
- Android开发——JVM、Dalvik以及ART的区别【转帖】
转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52354964 0. 前言 Dalvik是Google公司自己设计用于Android平 ...
- Android ART简介
一. Android ART简介 Android DEX/ODEX/OAT文件
- android 58 jvm和dvm的区别(Dalvil VM)
java程序在jvm和dvm的执行过程: #jvm和dvm的区别(Dalvil VM) 谷歌刚开发的安卓系统用的就是JVM,JVM版权属于sun公司也就是Oracle公司,后来用的是DVM,由于版权问 ...
- jvm-垃圾回收gc简介+jvm内存模型简介
gc是jvm自动执行的,自动清除jvm内存垃圾,无须人为干涉,虽然方便了程序员的开发,但同时增加了开发人员对内存的不可控性. 1.jvm内存模型简介 jvm是在计算机系统上又虚拟出来的一个伪计算机系统 ...
- Java JVM监控工具JConsole简介
Java JVM监控工具JConsole简介 jconsole命令 功能:打开java监视管理控制台 方法: jconsole [选项1] [选项2] …… [选项n] 常用选项: -help ...
- Java基础-JVM调优策略简介
Java基础-JVM调优策略简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JVM结构分析 1>.JVM结构图 2>.JVM运行时数据区功能说明 JVM管理的内 ...
- JRE与JVM、JDK的区别
JRE与JVM.JDK的区别 一. 详细介绍1.JVM -- java virtual machine JVM就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程 ...
- Java的特性和优势以及不同版本的分类,jdk,jre,jvm的联系与区别,javadoc的生成
Java 1.Java的特性和优势 Write Once,Run Anywhere 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 2.Java的三大版本 JavaSE:标 ...
- Android开发——JVM、Dalvik以及ART的区别
)预编译也可以明显改善电池续航,因为应用程序每次运行时不用重复编译了,从而减少了 CPU 的使用频率,降低了能耗.
随机推荐
- CF_225B _Well-known Numbers
Numbers k-bonacci (k is integer, k > 1) are a generalization of Fibonacci numbers and are determi ...
- Sql中的datetime类型的空值和c#中的DateTime的空值的转换方法
[一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/3412796.html] 在NET 2.0以上版本提供了一种新的方法 就是加问号,DateTim ...
- iframe的安全问题
今天尝试在iframe中嵌入外部网站, 碰到了一些小问题. 如何让自己的网站不被其他网站的iframe引用? 我测试的时候发现我把iframe的src指定到github不起作用. 原来是它把X-Fra ...
- Apache mod_fcgid fcgid_header_bucket_read函数缓冲区溢出漏洞
漏洞名称: Apache mod_fcgid fcgid_header_bucket_read函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201310-455 发布时间: 2013-10-21 ...
- WordPress RokIntroScroller插件‘thumb.php’多个安全漏洞
漏洞名称: WordPress RokIntroScroller插件‘thumb.php’多个安全漏洞 CNNVD编号: CNNVD-201309-383 发布时间: 2013-09-24 更新时间: ...
- 【Node】SuperAgent
What is the current mechanism to construct a query string with SuperAgent?http://stackoverflow.com/q ...
- 【转】关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
原文网址:http://www.cnblogs.com/cywin888/p/3263027.html 刚接触iOS开发的人难免会对苹果的各种证书.配置文件等不甚了解,可能你按照网上的教程一步一步的成 ...
- [C#网络编程系列]专题一:网络协议简介
转自:http://www.cnblogs.com/zhili/archive/2012/08/11/NetWorkProgramming.html 因为这段时间都在研究C#网络编程的一些知识, 所以 ...
- HDU --1251
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- c# 如何通过反射 获取\设置属性值
c# 如何通过反射 获取\设置属性值 //定义类public class MyClass{public int Property1 { get; set; }}static void Main(){M ...