JVM Java虚拟机
JVM(Java Virtual Machine)是一种软件实现,执行像物理程序的机器。JVM并是不专为Java所实现运行的,只要其他编程语言的编译器能生成Java字节码,那这个语言也能实现在JVM上运行。因此,JVM通过执行Java bytecode可以使java代码在不改变的情况下在各种硬件之上。
Dalvik 虚拟机
Dalvik虚拟机是基于apache的java虚拟机,并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。
JVM和Dalvik工作流程:
image.pngJVM和DVM区别:
Java虚拟机 | Dalvik虚拟机 |
---|---|
java虚拟机基于栈,基于栈的机器必须使用指令来载入和操作栈上数据 | Dalvik虚拟机基于寄存器 |
java虚拟机运行的是java字节码。(java类会被编译成一个或多个字节码.class文件,打包到.jar文件中,java虚拟机从相应的.class文件和.jar获取相应的字节码) | Dalvik运行的是自己专属的.dex字节码格式。(java类被编译成.class文件后,会通过一个dx工具将所有的.class文件转换成一个.dex文件,然后dalvik虚拟机会从其中读取指令和数据) |
- | 一个应用对应一个Diavik虚拟机实例,独立运行 |
JVM在运行的时候为每一个类装载字节码 | Dalvik程序只包含一个.dex文件,这个文件包含了程序中所有的类 |
SDK和JDK
SDK,Soft Development Kit (软件开发包)。但需要指明是属于什么的开发包。比如Android SDK就是Android开发包,再比如Push SDK就是消息推送的SDK。
比如26版本的Android SDK,没有Android SDK就无法进行Android开发。
JDK,(Java Development Kit)java开发工具包,包中提供了java语言的类库。
Art虚拟机
即Android Runtime,Android 4.4发布了一个ART运行时,准备用来替换掉之前一直使用的Dalvik虚拟机。
ART 的机制与 Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器(just in time ,JIT)转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。这个过程叫做预编译(AOT,Ahead-Of-Time)。这样的话,应用的启动(首次)和执行都会变得更加快速。
Dalvik与Art的区别:
- Dalvik每次都要编译再运行,Art只会首次启动编译
- Art占用空间比Dalvik大(原生代码占用的存储空间更大),就是用“空间换时间”
- Art减少编译,减少了CPU使用频率,使用明显改善电池续航
- Art应用启动更快、运行更快、体验更流畅、触感反馈更及时
注:
现在智能手机大部分都可以让用户选择使用Dalvik还是ART模式。默认还是使用Dalvik模式。
网友评论