以下内容来源于网络,整理在此作为自己的学习笔记:
class文件的作用
class文件的作用是记录一个类文件的所有信息。
例如记住了当前类的引用this、父类super等等。class文件记录的信息往往比java文件多。
class文件结构:
1、一种8位字节的二进制流文件
2、各个数据按照顺序紧密的排列,无间隙
3、每个类或接口都单独占据一个class文件
class文件的弊端
内存占用大,不适合于移动端
堆栈的加载模式导致加载速度慢
文件IO操作多,类查找慢
DEX:Android平台上可执行文件的类型。
原文来自:
JVM和DVM区别 - CSDN博客
https://blog.csdn.net/u014623470/article/details/44524835
区别一:
dvm执行的是.dex格式文件 jvm执行的是.class文件 android程序编译完之后生产.class文件,然后,dex工具会把 .class文件处理成 .dex文件,然后把资源文件和.dex文件等打包成.apk文件。apk就是android package的意思。 jvm执行的是.class文件。
区别二:
dvm是基于寄存器的虚拟机 而jvm执行是基于虚拟栈的虚拟机。寄存器存取速度比栈快的多,dvm可以根据硬件实现最大的优化,比较适合移动设备。
区别三:
.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中。减少了I/O操作,提高了类的查找速度
为什么dex更精简,更适合移动端呢?
因为.dex把所有.class的 header头(包含JDK)写成了一个,所有的常量放在一个池里, .dex只维护了一个索引.
JVM: .java –> javac –> .class –> jar –> .jar
架构: 堆栈
DVM: .java –> javac –> .class –> dx.bat –> .dex
架构: 寄存器(cpu上一块高速的缓存)
dex文件的作用
dex文件的作用是记录整个工程(通常是一个Android工程)的所有类文件的信息。
dex文件的结构
8位字节的二进制流文件
各个数据紧密排列,无间隙,减少了文件体积,加快加载速度
整个工程的类信息都存放在一个dex文件中(不考虑dex分包的情况下)