字节码文件的跨平台性
Java语言:跨平台的语言(Write Once,Run Anywhere)
- 当Java源代码编译成字节码后,如果想在不同平台上运行,则无须再次编译
- 这上优势不再那么吸引人,Python,PHP,Ruby,Lisp等有强大的解释器
- 跨平台似乎已经成为一门语言必选的特性
Java虚拟机:跨语言的平台
- Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制格式文件关联,无论使用何种语言进行软件开发,只要能将源文件编译成正确的Class文件,那么这种语言就可以在Java虚拟机上执行,统一而强大的Class文件结构,是Java虚拟机的基石和桥梁。

- 所有的JVM全部遵守Java虚拟机规范,字节码文件可以在各种JVM上执行
前端编译器
- 负责将符合Java语法规范的Java代码编译成符合JVM规范的字节码
- javac是最常用的前端编译器
- javac编译器将Java源码编译为一个有效的字节码文件过程经历4步,分别是词法分析、语法分析、语义解析以及生成字节码

Oracle JDK软件包括两部分内容
- 一部分将Java源代码编译成Java虚拟机的指令集的编译器
- 另一部分是用于实现Java虚拟机的运行时环境
public class IntegerTest {
public static void main(String[] args) {
Integer x = 5;
int y = 5;
System.out.println(x == y);
Integer i1 = 5;
Integer i2 = 5;
System.out.println(i1 == i2);
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4);
}
}
true
true
false
0 iconst_5
1 invokestatic #2 <java/lang/Integer.valueOf>
4 astore_1
5 iconst_5
6 istore_2
7 getstatic #3 <java/lang/System.out>
10 aload_1
11 invokevirtual #4 <java/lang/Integer.intValue>
14 iload_2
15 if_icmpne 22 (+7)
18 iconst_1
19 goto 23 (+4)
22 iconst_0
23 invokevirtual #