Java Nashorn--Part 1
伴随 Java 8 的发布,Oracle 也一同发布了 Nashorn,它是在 Java 虚拟机上运行 Javascript 语言的一个引擎。Nashorn 的设计是为了替换最初的运行在 JVM 上的项目——被称之为 Rhino(Nashorn 是 rhino 的德语中的词语)。
Nashorn 完全重写和实现,谋求和 Java 的高效的交互性,精准地保证与 JavaScript ECMA 规范的一致性。Nashorn 是第一个达到 100% 遵从 JavaScript 的规范,并且在绝大部分工作量上运行速度是 Rhino 的20倍之多。
介绍Nashorn
在JVM 上运行的非 Java 语言
实际上,有很多非 Java 的语言运行在 JVM 上,有很多语言看起来不同与Java,例如 JavaScript。这就使 Java 和 JVM 保持松耦合提供了可能,并且真正通过类文件格式的定义进行交互。 这里可以通过两种不同的方式实现:
- 源语言具有在Java中实现的解释器。解释器在 JVM上 运行,并执行以源语言编写的程序。
- 源语言附带有一个编译器,它从源语言代码的单元生成类文件。生成的编译类文件然后在JVM上直接执行,这通常需要一些额外的语言特定的运行时支持。
Nashorn 采用第二种方法, 但是增加了细化,编译器在运行时内部,所以JavaScript 源代码从不在程序执行开始之前编译。 这意味着不是专门为 Nashorn 编写的 JavaScript 仍然可以轻松地部署在平台上。
注意:
Nashorn 不像许多其他 JVM 语言(如JRuby),因为它不实现任何形式的解释器。 Nashorn 总是将 JavaScript 编译为 JVM 字节码,并直接执行字节码。
Nashorn 的动机
Nashorn 在 Java 和 JVM 生态系统中提供多种用途。
- 首先,它为 JavaScript 开发人员提供了一个可行的环境来发掘 JVM 的强大功能。
- 第二,它使公司能够继续利用他们对 Java 技术的现有投资,同时另外采用 JavaScript 作为开发语言。
- 最后,它为 HotSpot JVM 中的高级虚拟机技术提供了一个伟大的工程展示。
随着 JavaScript 的不断增长和应用,从浏览器的传统首页扩展到更通用的计算和服务器端,Nashorn 在现有的坚如磐石的Java生态系统和有前途的新技术之间架起了巨大的桥梁。
在 Nashorn 下执行 JavaScript
接下来会介绍 Nashorn 的运行环境,还有两种执行 JavaScript 的方式(这两种方式都会在 JAVA_HOME 环境变量下的 bin 目录里执行):
- jrunscript:执行以.js 结尾的 JavaScript 脚本
- jjs:一个更多功能的 shell - 适用于运行脚本和作为一个交互,实时代码预览功能环境以及探索 Nashorn 其他功能。