1. 程式人生 > >外掛化學習筆記一:class和dex檔案的區別

外掛化學習筆記一:class和dex檔案的區別

以下內容來源於網路,整理在此作為自己的學習筆記:

class檔案的作用

class檔案的作用是記錄一個類檔案的所有資訊。
例如記住了當前類的引用this、父類super等等。class檔案記錄的資訊往往比java檔案多。

class檔案結構:

1、一種8位位元組的二進位制流檔案
2、各個資料按照順序緊密的排列,無間隙
3、每個類或介面都單獨佔據一個class檔案

class檔案的弊端

記憶體佔用大,不適合於移動端
堆疊的載入模式導致載入速度慢
檔案IO操作多,類查詢慢

DEX:Android平臺上可執行檔案的型別。

區別一:

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分包的情況下)