安卓在4.4版本的时候发布了ART的运行模式。ART全称为Android Runtime。至于为啥要发布这样一个运行时要从dalvik的诞生说起。安卓使用java语言开发,那就必然要用到一个虚拟机运行(这里不排除某些超神的编译器直接把java编译成机器语言)。在普通的x86上那么用的是JRE,也是官方的运行时,运行的是JDK编译出来的class字节码。不过在手机上就要稍微更改一下,运行的是java一种方言dex字节码。而对应的虚拟机就是dalvik。class文件包含大量陈余信息,dex文件格式会把所有的.class文件内容整合到一个.dex文件中。即减少了整体文件的尺寸和IO操作,也提高了类的查找速度。 所以说dex可以理解为class的手机平台优化版。更加详细的区别看
[这里](http://blog.youkuaiyun.com/fangchao3652/article/details/42246049)
有工具可以吧class文件直接转换为dex文件。
使用命令 javac –source 1.6 –target 1.6 Sum.java进行编译,得到Sum.class.
使用命令 dx –dex –output=Sum.dex Sum.class,生成dex文件。
这里一定要加上 –target 1.6。因为高版本的class文件dx工具不能识别那么问题来了。
为啥google要用dalvik呢?1首先java的程序员很多。一定程度减少了学习成本2简历一个java虚拟机可以屏蔽一些底层细节,能够做到更好的适应性。不过为了这两个特点也是要有牺牲的,那就是性能。安卓基于Java语言,iOS是基于Obejctive-C。表现在手机和应用程序运行机制上,Java的代码实际上需要 两次“转换”才能最终以用户可看的程序跑起来,一次发生在开发者发布安装包前,使用开发者自己机器的CPU,另一次在用户启动APP前,使用手机的 CPU。而基于Objective-C的代码只需要一次这种“转换”,在开发者发布安装包前,所以只占用开发者机器的CPU时间。所以,苹果手机天生比安卓快。所以现在google也在想能不能绕过这个虚拟机。所以就有了ART。ART的程序直接可以运行在硬件上。就像编译过一样。但是在哪里编译的呢?就是在程序安装的时候编译的。所以也就带来了ART的缺点。
ART优点:
1、系统性能的显著提升。
2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。
3、更长的电池续航能力。
4、支持更低的硬件。
ART缺点:
1、更大的存储空间占用,可能会增加10%-20%。因为程序编译过了,所以变大。
2、更长的应用安装时间。因为安装的时候要编译