1.解释型语言和编译型语言:
解释型语言:将源程序翻译一句,执行一句。解释型语言运行速度慢,依赖于解释器,优点是跨平台性好。
解释型语言具有跨平台的特性是因为不同平台上的解释器不同,比如JAVA(虽然不是纯解释型语言),在android平台上的解释器是dalvik虚拟机,在windows平台上有专门的jvm for windows(目前还没有IOS版的JVM,不然java程序也可以跑在iphone上了)。
编译型语言:将源程序一次性编译成二进制码(机器码),可直接运行。编译型语言依赖编译器,运行速度快,效率高,缺点是移植性不好。
关于编译型语言的可移植性,这里以C++为例,事实上纯C++可以在任意平台运行,因为被编译成了机器可执行的machine code。那为什么说编译型语言的移植性不好呢?编译型语言想要跨操作系统或者跨机器,与编译器、操作系统、硬件体系等很多方面有很大关系,一般移植性高的程序都用GCC,G++编译器。与编程人的个人水平也有关系,前面说了,纯C++可以在任意平台运行,所以用C++写的代码想要跨平台,就要尽可能的少用专有的特性,比如windows平台上使用微软的MFC(封装了大部分的windows API函数)进行界面程序开发,这样肯定无法移植到Linux上。
2.JAVA
java是一门特殊的语言,它也需要编译,不过不是编译成机器码,而是编译成字节码,然后解释成机器码。
JVM的作用是将编译好的字节码在运行时翻译成对应平台的机器码。
3.Dalvik 和JVM
Dalvik是google为android系统开发的java虚拟机,它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
java compiler android DX编译器 优化
java source code (.java)------------------->java byte code(.class)---------------------------->java byte code(.dex)--------------
解释
--------->(.odex)---------------------------->machine code
dalvik虚拟机所做的工作就是从java byte code(.class)到machine code之间的过程。
Dalvik vm 和 JVM的差异:
1.DALVIK是基于寄存器的,而JVM基于栈
2.Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
3.Dalvik虚拟机运行的是其专有的文件格式Dex,Dex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。
4.JNI 和 NDK