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 其他功能。
Java Nashorn--Part 1的更多相关文章
- Java 7 可执行的 Nashorn,取代 Rhino
惊现有人把 OpenJDK 上的 Nashorn dump 下来,使得 Java 7 都能够使用.源代码在 https://bitbucket.org/ramonza/nashorn-backport ...
- Learning Java 8 Syntax (Java in a Nutshell 6th)
Java is using Unicode set Java is case sensitive Comments, C/C++ style abstract, const, final, int, ...
- Atitit。Js调用后台语言 java c# php swing android swt的方法大总结
Atitit.Js调用后台语言 java c# php swing android swt的方法大总结 1. Js调用后台语言有三种方法1 2. Swt BrowserFunction 绑定方法 ...
- JS代码检查工具ESLint
前面的话 ESLint是一个JavaScript代码静态检查工具,可以检查JavaScript的语法错误,提示潜在的bug,可以有效提高代码质量,维持前端团队高度一致的编码风格.ESLint不但提供一 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java 8 的 Nashorn 脚本引擎教程
本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...
- Nashorn 在JDK 8中融合Java与JavaScript之力
从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript中调 ...
- Nashorn——在JDK 8中融合Java与JavaScript之力
从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript ...
- java 11 移除的一些其他内容,更简化的编译运行程序,Unicode 10,移除了不太使用的JavaEE模块和CORBA技术,废除Nashorn javascript引擎,不建议使用Pack200 相关api
移除的一些其他内容 移除项 移除了com.sun.awt.AWTUtilities 移除了sun.misc.Unsafe.defineClass, 使用java.lang.invoke.MethodH ...
- Java 8 Nashorn JavaScript
转自:https://www.runoob.com/java/java8-nashorn-javascript.html Nashorn 一个 javascript 引擎. 从JDK 1.8开始,Na ...
随机推荐
- ORA-01654错误
问题现象: 测试库使用如下方式创建索引: create index IDX_ANA_OFFICE on ANA (OFFICE_CITY, OFFICE_NO) tablespace IDX ...
- Docker镜像保存save、加载load
(1)查看要要保存的镜像的ID [root@localhost docker]# docker images (2)保存镜像 [root@localhost docker]# docker save ...
- vs 15 key
vs 15 Key :HM6NR-QXX7C-DFW2Y-8B82K-WTYJV vs 15 Key :2XNFG-KFHR8-QV3CP-3W6HT-683CH
- JS base64加解密解决传输的url各种编码问题
网上拷贝的,废话少说,直接上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...
- Java多线程之线程的状态以及线程间协作通信导致的线程状态转换
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6561589.html 一:线程的状态以及变化图 Java中线程中状态可分为五种:New(新建状态),Ru ...
- 对2个hex(16进制)字符串进行异或操作
private static String hexXOR(String hex1, String hex2){ BigInteger i1 = new BigInteger(hex1, 16); Bi ...
- V-rep中的加速度计与陀螺仪
加速度计(Accelerometer) VREP的模型浏览器components→sensors中可以找到加速度计的模型,用于测量物体沿着世界坐标系三个坐标轴的加速度值. VREP中没有直接测量加速度 ...
- 如何快速的得到string的最后一个字符
str='python' print str[-1]
- 远程过程调用协议(RPC)
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的 ...
- 最长公共子序列(POJ1458)
题目链接:http://poj.org/problem?id=1458 题目大意:给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和 ...