虽然Android平台使用Java来开发应用程序,但Android程序却不是运行在标准Java虚拟机上的。
可能是出于效率和版权的考虑,Google为Android专门设计了一套虚拟机Dalvik Virtual Machine。
上面是第三章的前言,一年多以前,作者写这本书的时候,Kitkat(Android 4.4)还没有出来,作者也声明这本书默认使用的是Android4.1和Linux3.4的环境。
而4.4版本的Android的「开发者选项」中已经添加了Art模式和Dalvik模式切换的功能,而前几天Google I/O宣布 下一代Android(代号L)会正式移除Dalvik。
因为:
- 1,ART的性能比Dalvik好
- 2,ART对dex的检验比Dalvik严格,某些经过后处理(如混淆)的dex文件即便能在Dalvik环境正常运行,但也可能无法通过ART的检查。用于代码混淆/加密的软件可能需要针对ART做出变动。
- 3,改进了垃圾回收
- 4,更好的debug工具
对于非预装软件,ART的编译是在手机端现场进行,这远比dalvik环境下制作optimized dex慢。带有大量java代码的应用(比如淘宝,比如微信,比如QQ)会受到很大影响,它们安装时间可达数十秒乃至超出一分钟。
更多关于Dalvik与Art:Link
不过既然书中写了这一章,那还是学一下。
-----------------------------------------------------------------
Dalvik虚拟机概述
Dalvik在2007年Android SDK发布的时候进入人们的实现,名字来源于作者Dan Bornstein的祖先居住过Dalvik小渔村。特点:
- 体积小,占用内存空间小;
- 专有的DEX可执行文件格式,体积小速度快;
- 常量池采用32位索引值,寻址更快;
- 基于寄存器架构,拥有完整的指令系统;
- 提供了对象生命周期管理,堆栈管理,线程管理,安全和异常管理以及垃圾回收等重要功能。
- 所有的Android程序都运行在系统进程里,每一个进程对应一个Dalvik虚拟机实例。
Dalvik虚拟机与Java虚拟机的区别
Dalvik虚拟机与传统Java虚拟机并不兼容,不同点主要有:
1.Java虚拟机运行的是Java字节码,Dalvik虚拟机运行的是Dalvik字节码
Java虚拟机通过解码class文件中的内容来运行程序;
Dalvik虚拟机运行的Dalvik字节码由Java字节码转换而来,并被打包成一个DEX(Dalvik Executable)可执行文件,Dalvik虚拟机通过解释DEX文件来执行这些字节码。