Nashorn是什么

Nashorn,发音“nass-horn”,是德国二战时一个坦克的命名,同时也是java8新一代的javascript引擎--替代老旧,缓慢的Rhino,符合 ECMAScript-262 5.1 版语言规范。你可能想javascript是运行在web浏览器,提供对html各种dom操作,但是Nashorn不支持浏览器DOM的对象。这个需要注意的一个点。

关于Nashorn的入门

主要是两个方面,jjs工具以及javax.script包下面的API:

jjs是在java_home/bin下面自带的,作为例子,让我们创建一个func.js, 内容如下:

运行这个文件,把这个文件作为参数传给jjs

输出结果:2

另一个方面是javax.script,也是以前Rhino余留下来的API

输出如下:

javascript运行在jvm已经不是新鲜事了,Rhino早在jdk6的时候已经存在,但现在为何要替代Rhino,官方的解释是Rhino相比其他javascript引擎(比如google的V8)实在太慢了,要改造Rhino还不如重写。既然性能是Nashorn的一个亮点,下面就测试下性能对比,为了对比两者之间的性能,需要用到Esprima,一个ECMAScript解析框架,用它来解析未压缩版的jquery(大约268kb),测试核心代码如下:

从代码可以看出,测试程序将执行Esprima的parse和tokenize来运行测试文件的内容,Rhino和Nashorn分别执行30次,在开始时候,Rhino需要1726 ms并且慢慢加速,最终稳定在950ms左右,Nashorn却有另一个特色,第一次运行耗时3682ms,但热身后很快加速,最终每次运行稳定在175ms,如下图所示

nashorn首先编译javascript代码为java字节码,然后运行在jvm上,底层也是使用invokedynamic命令来执行,所以运行速度很给力。

为何要用java实现javascript

这也是大部分同学关注的点,我认同的观点是:

1.成熟的GC

2.成熟的JIT编译器

3.多线程支持

4.丰富的标准库和第三方库

总得来说,充分利用了java平台的已有资源。

总结

新犀牛可以说是犀牛式战车,比Rhino速度快了许多,作为高性能的javascript运行环境,Nashorn有很多可能。

举例, Avatar.js 是依赖于Nashorn用以支持在JVM上实现Node.js编程模型,另外还增加了其他新的功能,如使用一个内建的负载平衡器实现多事件循环,以及使用多线程实现轻量消息传递机制;Avatar还提供了一个Model-Store, 基于JPA的纯粹的JavaScript ORM框架。

在企业中另外一种借力 Nashorn方式是脚本,相比通常我们使用Linux等shell脚本,现在我们也可以使用Javascript脚本和Java交互了,甚至使用Nashorn通过REST接口来监视服务器运行状况。

nashorn java_Java新特性之Nashorn的实例详解相关推荐

  1. nashorn java_Java新特性之Nashorn

    原标题:Java新特性之Nashorn Nashorn是什么 Nashorn,发音"nass-horn",是德国二战时一个坦克的命名,同时也是java8新一代的java引擎--替代 ...

  2. 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现

    Python 爬虫篇 - 爬取全国新冠肺炎疫情数据实例详解 效果图展示 第一章:疫情信息的下载与数据提取 ① 爬取页面数据到本地 ② json 字符串正则表达式分析 ③ 提取数据中的 json 字符串 ...

  3. 【Stream流学习】Java 8 新特性|Collectors.joining() 案例详解

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  4. C++11、C++14、C++17、C++20新特性总结(5万字详解)

    文章目录 C++ 11是什么,C++ 11标准的由来 C++ auto类型推导完全攻略 auto 类型推导的语法和规则 auto 的高级用法 auto 的限制 auto 的应用 使用 auto 定义迭 ...

  5. java8新特性(四)_Stream详解

    之前写过一篇用stream处理map的文章,但是对stream没有一个整体的认识,这次结合并发编程网和ibm中介绍stream的文章进行一个总结,我会着重写对list的处理,毕竟实际工作中大家每天进行 ...

  6. 19c 新特性: Hint Usage Reports详解

    老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门,10+年甲骨文解决方案咨询支持经验,资深系统工程师.Oracle OCM认证专家,具有丰富的 ...

  7. mysql按升序创建索引_MySQL8新特性:降序索引详解

    前言 MySQL 8.0终于支持降序索引了.其实,从语法上,MySQL 4就支持了,但正如官方文档所言,"they are parsed but ignored",实际创建的还是升 ...

  8. Oracle 19c 新特性:Schema Only Account详解

    点击▲关注 "数据和云"   给公众号标星置顶 更多精彩 第一时间直达 老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门, ...

  9. React 新特性 Hooks 讲解及实例(四)

    想优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 使用 Ref Hooks 类组件中使用 Ref 一般有: String Ref Callback Ref CreateRef 上述在函数组 ...

最新文章

  1. 像数据分析一样写 Web 页面,这个 Python 库做到了!
  2. 解决 .htaccess 导致的403禁止访问
  3. #一周五# VS2015 CTP6, TFS2015 CTP1更新,老衣的开发工具汇总,2015 MVP 社区巡讲
  4. Nova 启动虚拟机流程解析
  5. 王吉伟:厉害了王坚的《在线》 未来世界还有什么不能被计算?
  6. python数据库连接类写其他类调用报超时_python面向对象,类,以及连接数据库
  7. RawCode-本身就是实验性的8位类型
  8. 【iOS越狱开发】iOS越狱步骤1之环境搭建
  9. 陀螺世界进度条一天进度多少_陀螺世界满级要多久?
  10. PS冷知识:PS隐藏功能中的组合键
  11. Maxwell参数化建模和优化设计
  12. 空间数据库管理方案及数据文件组织方式
  13. LAMBDA表达式常用写法
  14. 跨境电商“独立站”新风口丨从0-1答疑解惑篇
  15. win10中安装JDK8以及环境配置
  16. 如何翻译DeepFaceLab(DeepFake)的交互式合成器
  17. 计算机科学个人陈述中文,留学文书写作范例-计算机科学(个人陈述)
  18. 百度、谷歌、雅虎三大搜索引擎算法区别
  19. 刷机案例-----谷歌pixel系列机型刷写系统的一些问题解析
  20. ITON - 2 论名字

热门文章

  1. oracle几个概念:数据库、实例、用户、schema
  2. 在PC上测试移动端网站和模拟手机浏览器的5大方法
  3. mysql 分区 效率_【MySQL】MySQL分区表效率测试对比
  4. android长按加入购物车,Android Studio实现简单购物车功能
  5. 支付通道对接常见的问题有哪些
  6. java上传图片到本地磁盘
  7. 【kali-信息收集】(1.3)探测网络范围:DMitry(域名查询工具)、Scapy(跟踪路由工具)
  8. 探讨不良资产转让涉及的法律问题
  9. 【光纤通信—第三部分 光检测与光接收机】光检测器
  10. 虚拟机三种网络设置详细说明