JVM規範系列第3章:爲Java虛擬機編譯

Oracle 的 JDK 包括兩部份內容:一部分是將 Java 源代碼編譯成 Java 虛擬機的指令集的編譯器,另外一部分是用於Java 虛擬機的運行時環境。html

第一部分應該說的是 Javac 這個前置編譯器,用於將Java源代碼編譯成字節碼。第二部分是說 JIT 即時編譯器,用於在JVM運行時進行進一步優化,將字節碼編譯成本地機器碼。java

即時代碼生成器(Just-In-Time/JIT Code Generator)就是一種在 Class 文件中的代碼被 Java 虛擬機代碼加載後,生成與平臺相關的特定指令的編譯器。less

上面這句驗證了個人理解,JIT編譯器把字節碼轉成與平臺相關的特定指令。jvm

Java 虛擬機代碼將使用 Oracle 的 javap 工具所生成的非正式的「虛擬機彙編語言(Virtual Machine Assembly Language)」格式來描述。ide

原來javap生成的那份東西叫作:虛擬機彙編語言!漲知識了!工具

下面是一個Java代碼的字節碼指令,經過這個例子瞭解下字節碼指令,很是不錯。oop

void spin() {
	int i;
	for (i = 0; i < 100; i++) {
		; // Loop body is empty
	}
}

對應的字節碼指令:優化

Method void spin()
0 iconst_0 // Push int constant 0
1 istore_1 // Store into local variable 1 (i=0)
2 goto 8 // First time through don’t increment
5 iinc 1 1 // Increment local variable 1 by 1 (i++)
8 iload_1 // Push local variable 1 (i)
9 bipush 100 // Push int constant 100
11 if_icmplt 5 // Compare and loop if less than (i < 100)
14 return // Return void when done

下面的各類都是對於字節碼指令的解讀,有點枯燥,耐心看下去就行了。ui

JVM規範系列文章目錄

相關文章
相關標籤/搜索