[深入理解Java虚拟机]第六章 无关性的基石

如果计算机的CPU指令集只有x86一种 ,操作系统也只有Windows—种 ,那也许Java语言就不会出现 。 Java在刚刚诞生之时曾经提出过一个非常著名的宣传 口 号 :“ 一 次 编 写 ,到 处 运 行 ( Write Once,Run Anywhere ) ”,这句话充分表达了软件开发人员对冲破平台界限的渴求。在无时无刻不充满竞争的IT领域,不可能只有Wintel存在,我们也不希望只有Wintel存 在 ,各种不同的硬件体系结构和不同的操作系统肯定会长期并存发展。“与平台无关”的理想最终实现在操作系统的应用层上:Sun公司以及其他虚拟机提供商发布了许多可以运行在各 种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的次编写,到处运行”。

各种不同平台的虚拟机与所有平台都统一使用的程序存储格式— 字节码( ByteCode ) 是构成平台无关性的基石,但本节标题中刻意省略了“平台”二 字 ,那是因为笔者注意到虚拟 机的另外一种中立特性— 语言无关性正越来越被开发者所重视。到目前为止,或许大部分 程序员都还认为Java虚拟机执行Java程序是一件理所当然和天经地义的事情。但在Java发展之初 ,设计者就曾经考虑过并实现了让其他语言运行在Java虚拟机之上的可能性,他们在发布规范文档的时候,也刻意把Java的规范拆分成了Java语言规范《 The Java Language Specification》及Java虚奴机规范《 The Java Virtual Machine Specification》。并且在1997年发布的第一版Java虚拟机中就曾经承诺过 : “In the future,we will consider bounded extensions
to the Java virtual machine to provide better support for other languages” (在未来,我们会对Java 虚拟机进行适当的扩展,以便更好地支持其他语言运行于JVM之 上 ),当Java虚拟机发展到 JDK 1.7〜1.8的时候,JVM设计者通过JSR-292基本兑现了这个承诺。

时至今日,商业机构和开源机构已经在Java语言之外发展出一大批笔Java虚拟机之上运行的语言,如Clojure、Groovy、JRuby、Jython、Scala等。使用过这些语言的开袭者可能还不是非常多,但是听说过的人肯定已经不少,随着时间的推移,谁能保证日后Java虚拟机在语言无关性上的优势不会赶上甚至超越它在平台无关性上的优势呢?

实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息。基于安全方面的考虑,Java虚拟机规范要求在Class文件中使用许多强制性的语法和结构化约束,但任一门功能性语言都可以表示 为一个能被Java虚拟机所接受的有效的Class文件。作为一个通用的、机器无关的执行平台, 任何其他语言的实现者都可以将Java虚拟机作为语言的产品交付媒介。例如 ,使用Java编译 器可以把Java代码编译为存储字节码的Class文 件 ,使用JRuby等其他语言的编译器_ 样可以 把程序代码编译成Class文 件 ,虚拟机并不关心Class的来源是何种语言,如图6-1所示。

《[深入理解Java虚拟机]第六章 无关性的基石》

Java语言中的各种变量、关键字和运算符号的语义最终都是由多条字节码命令组合而成的 ,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更加强大。因此,有一些Java语言本身无法有效支持的语言特性不代表字节码本身无法有效支持,这也为其他语言实现一些有别于Java的语言特性提供了基础。

    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/coslay/article/details/49287137
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞