1. 概述
在计算机科学领域有一句名言,“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”,JVM就是在这样的背景下应用而生的。Java在设计之初就提出“一次编译,到处运行”。即Java编译生产的二进制文件能够在不做任何改变的情况下运行于多个平台,实现跨平台。
2. 平台无关性的基石
例如,使用Java编译器可以把Java代码编译为存储字节码的Class文件,使用JRuby等其他语言的编译器一样可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是何种语言。
例如,使用Java编译器可以把Java代码编译为存储字节码的Class文件,使用JRuby等其他语言的编译器一样可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是何种语言。如下图:
2.1. Java语言:跨平台的语言(write once,run anywhere)
java源代码编译成字节码文件后,可以直接在其他装有java虚拟机的平台上运行
2.2. Java虚拟机:跨语言的平台
Java虚拟机不和包括Java在内的任何语言绑定,它只与Class文件这种特定的二进制文件格式所关联。无论使用何种语言进行开发,只要能将源文件编译成正确的Class文件,那么这种语言就可以在Java虚拟机上执行。可以说Class文件结构,就是Java虚拟机的基石,桥梁。
3. Java虚拟机规范
所有的JVM全部遵守Java虚拟机规范,也就是说所有的JVM环境都是一样的,这样字节码文件就可以在各种JVM上运行。
4.前端编译器
前端编译器的主要任务就是负责将符合Java语法规范的Java代码转换成为符合JVM规范的字节码文件,javac就是一种能将Java源代码编译为字节码文件的的前端编译器。javac编译器在将Java源代码编译为一个有效的字节码过程中经历4个步骤:词法分析,语法分析,语义解析,生成字节码。如下图:标红就是Javac编译器
相对的在执行引擎模块中 JIT compiler我们称为后端编译器;