深入JVM 平台无关性与语言无关性
——通常所指的代码编译是一个从程序翻译成机器所能识别的二进制机器码的过程。然而越来越多的程序语言选择了与具体操作系统和机器指令集无关,平台中立的格式作为程序编译的存储格式
——与平台无关的构想最终实现在操作系统的应用层上,所谓不同平台的虚拟机都可以载入和执行同一种平台无关的字节码,从而实现一次编写,到处运行的目的
字节码(bytecode)是构成平台无关性的基石,Java虚拟机载入并执行统一的字节码,然而在这之外,Java虚拟机同样具有语言无关性的特征,类似于Groovy,JRuby等,这些语言只要能保证编译成Class字节码文件,就能实现在Java虚拟机上运行
实现语言无关性的基础是虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,它只和“Class文件”这种特定的文件格式所关联
Class文件种包含了Java虚拟机指令集和符号表以及其它必要辅助信息。Java虚拟机规范要求Class文件中使用许多强制性的语言和结构化约束,但任一门功能性语言都可以表示为一个能被Java虚拟机所接收的有效的Class文件。
作为一个通用的执行平台,任何语言的实现者都可以将Java虚拟机作为语言的产品交付媒介
Java语言中的各种变量,关键字,和运算符号的语义最终都由许多字节码命令组成,因此字节码命令所能提供的语义描述能力比Java语言本身更强大。这也为其它语言实现一些有别于Java的特性提供了基础