上QQ阅读APP看书,第一时间看更新
3.1 Dex文件格式总览
Dex文件是Android平台上Java源码文件经编译和处理后得到的字节码文件。读者可能会有疑问,为什么Android平台不直接使用Class文件,而是另起炉灶重新实现一种新的文件格式呢?此问题的答案有很多,笔者仅举一例。
Android系统主要针对移动设备,而移动设备的内存、存储空间相对PC平台而言较小,并且主要使用ARM的CPU。这种CPU有一个显著特点,就是通用寄存器比较多。在这种情况下,Class格式的文件在移动设备上不能扬长避短。比如,2.6.2节介绍invokevirtual指令的时候,我们看到Class文件中指令码执行的时候需要存取操作数栈(operand stack)。而在移动设备上,由于ARM的CPU有很多通用寄存器,Dex中的指令码可以利用它们来存取参数。显然,寄存器的存取速度比位于内存中的操作数栈的存取速度要快得多。
正式介绍Dex文件格式之前,我们先来了解Dex和Class文件格式之间的区别。