Java语言比较特殊,由Java语言编写的程序需要编译步骤,但这个编译步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码(也就是*.class文件)。当然,这种字节码不是可执行性的,必须使用Java解释器来解释执行。因此可以认为:Java语言既是编译型语言,也是解释型语言。或者说,Java语言既不是纯粹的编译型语言,也不是纯粹的解释型语言。Java程序的执行过程必须经过先编译,后解释两个步骤。----《疯狂java讲义》
如图,Java语言是跨平台语言,每个平台有不同的JVM(Java虚拟机),JVM的作用是将编译后的字节码文件(*.class文件)解释成特定平台的机器执行码。
oracle公司为了实现Java程序平台无关性,制定JVM的统一规范标准:
1. 指令器
2. 寄存器
3. 类文件格式
4. 栈
5. 垃圾回收堆
6. 存储区