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