- 虚拟机(JVM)的作用是什么
- 将Java源码编译成字节码文件.class文件,并且运行这些字节码文件,为什么可以运行呢,因为它可以将这些字节码解读(翻译)成不同平台(系统)对应的机器码,从而能运行。而Dalvik和Art是安卓中使用的虚拟机。
- Jvm虚拟机与Android虚拟机的区别
- 一个Java文件通过JVM虚拟机调用javac编译成.class文件,然后虚拟机运行该字节码文件时,就是将里面的字节码翻译成机器指令供硬件去运行。
- 在安卓体系里,一个Java文件通过虚拟机调用javac编译成.class文件后,会用dex工具去将该.class文件编译成.dex文件,然后这些.dex文件又会被打包成apk文件,当安装apk文件时,安卓虚拟机就会运行里面的.dex文件,将.dex里面的字节码翻译成机器指令供硬件去运行。
- Java虚拟机和Android虚拟机区别图
- image
- 安卓5.0之前的虚拟机是Dalvik虚拟机,使用的是JIT编译
- 即每次运行程序,都实时地进行将部分dex字节码编译成机器指令供手机去运行,这样整个apk包占用系统内存会很小,但因为每次运行都需要编译,所以CPU的消耗则变大。
- 5.0之后安卓虚拟机就变成ART虚拟机,使用AOT编译
- 即在应用安装期间,就将全部dex文件编译成机器指令存储在手机上。这样手机运行app时就可以直接运行这些机器指令,不需要像以前Dalvik虚拟机那样还要再去编译,这样就可以使得整个app运行过程速度要快很多。
- 当然与此同时app可能会比以前要占用的内存要大,但现在的安卓手机的内存已经发展的越来越大了,所以这个缺点是可以忽略不计的。
- class文件与dex文件区别是什么
- 一个class文件就是一个类文件,有多少个类则生成多少个文件,而一个dex文件是包含了很多文件。
- 查看classes.dex里面是包含很多文件的,对比class文件来说,使用dex方式可以减少文件数,从而减少很多冗余数据,减少占用的内存大小。
- class文件和dex文件的结构也是不一样:
- image