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规范系列文章目录

相关文章
相关标签/搜索