一、Java技術體系
1、Java體系構成
1)Java程式語言
2)Java虛擬機器
3)位元組碼檔案
4)Java類庫
5)第三方Java類庫
2、JDK、JRE、JVM之間的關係
1)JDK:Java程式語言、Java虛擬機器和Java類庫統稱為JDK(Java Development Kit)
2)JRE:Java類庫中的Java SE和Java虛擬機器統稱為JDR(Java Runtime Enviroment)
JVM介紹
(1)JVM官方文件定義
The Java Virtual Machine is an abstract computing machine. Like a real computing machine, it has an instruction set and manipulates various memory areas at run time. It is reasonably common to implement a programming language using a virtual machine; the best-known virtual machine may be the P-Code machine of UCSD Pascal.
The Java Virtual Machine knows nothing of the Java programming language, only of a particular binary format, the class file format. A class file contains Java Virtual Machine instructions (or *bytecodes*) and a symbol table, as well as other ancillary information.
(2)中文解釋
Java虛擬機器是一個抽象的計算機(本質上就是可執行程式)。它和真實的計算機相似,具有指令集且能夠在執行時對記憶體區域進行操作。Java虛擬機器並不能直接解釋Java語言,它只能夠解釋特定的二進位制格式,即.class檔案(位元組碼檔案)。
JVM結構
Java程式碼執行流程
JVM架構模型
1、指令架構
(1)基於棧式架構
a)設計和實現更簡單
b)指令集小,編譯器易實現
c)不需要硬體支援,可移植性更好,更容易實現跨平臺
(2)基於暫存器架構
a)依賴硬體,可移植性查
b)執行效率高
2、例子
(1)Java原始碼
public class StackTest {
public static void main(String[] args) {
int a = 2;
int b = 3;
int c = a + b;
}
}
(2)C++原始碼
void test() {
int a = 2;
int b = 3;
int c = a + b;
}
(3)基於棧式結構計算過程
使用jclasslib檢視位元組碼
0 iconst_2 常量為2
1 istore_1 將常量2儲存至索引為1的運算元棧中
2 iconst_3 常量為3
3 istore_2 將常量2儲存至索引為2的運算元棧中
4 iload_1 載入運算元棧索引為1所對應的值
5 iload_2 載入運算元棧索引為2所對應的值
6 iadd 相加
7 istore_3 將相加結果儲存至索引為3的運算元棧中
8 return
(4)基於暫存器結構計算過程
Android studio編寫完後使用ida檢視指令,ARM32下的彙編指令
SUB SP, SP, #0xC
MOVS R0, #2 運算元2移動至R0暫存器
STR R0, [SP,#0xC+var_4] R0暫存器的值寫入[SP,#0xC+var_4]地址
MOVS R0, #3 運算元3移動至R0暫存器
STR R0, [SP,#0xC+var_8] R0暫存器的值寫入[SP,#0xC+var_8]地址
LDR R0, [SP,#0xC+var_4] [SP,#0xC+var_4]的值讀入R0暫存器
LDR R1, [SP,#0xC+var_8] [SP,#0xC+var_8]的值讀入R1暫存器
ADD R0, R1 R0, R1暫存器相加,結果放置R0暫存器
STR R0, [SP,#0xC+var_C] R0暫存器的值寫入[SP,#0xC+var_C]地址
ADD SP, SP, #0xC
BX LR
3、思考
網上常有結論,在完成相同操作的情況下,基於棧式架構比基於暫存器架構的指令路量要多。這種說法嚴謹嗎?
可以從上面例子中看出ARM32下的基於暫存器架構的指令數量並不比基於棧式結構的指令數量少。很多人只討論了x86架構下的指令數量,而忽略了ARM架構下的指令集數量。