Nashorn on JDK 8
莫枢(@RednaxelaFX)
关于我
• 编程语言及虚拟机爱好者
• 曾在淘宝和Oracle任职参与Java虚拟机相
关研发工作
• 博客:http://rednaxelafx.iteye.com/
• 微博:@RednaxelaFX
何为Nashorn?
何为Nashorn?
何为Nashorn?
何为Nashorn?
http://www.battletanks.com/images/Nashorn-1.jpg
何为Nashorn?
• Oracle的ECMAScript 5.1实现
• 运行于Java虚拟机上
• 全新的代码,100% Java实现
• OpenJDK项目 / JEP 174
• GPLv2
• 作为JDK的一部分随JDK8发布
• ...
为何Nashorn?
• 改造Rhino?
• 优势:现成的实现,功能完整
• 劣势:代码老旧,难以翻新
为何用Java实现JavaScript?
• 充分利用Java平台已有的资源
• 成熟的GC
• 成熟的JIT编译器
• 多线程支持
• 丰富的标准库和第三方库
为何用Java实现JavaScript?
• JavaScript的标准库语义与Java相似
• 可以充分复用Java的标准库
• number -> java.lang.Double (*)
• string -> java.lang.Str...
为何用Java实现JavaScript?
http://img.xgo-img.com.cn/9_500x375/8144.jpg
为何用Java实现JavaScript?
http://cdn2.carsdata.net/pics/Hyundai/hyundai-coupe-fx-05.jpg
为何用Java实现JavaScript?
http://encarsglobe.com/photo/md/ferrari-430/04/
Nashorn的执行模型
• 纯编译,无解释器
• 从JavaScript源码编译为Java字节码
• 动态编译
• 延迟编译(lazy compilation)
Nashorn的执行模型
词法分析
语法分析
常量折叠
控制流lowering
类型标注
值域分析 (*)
代码分离
类型固化
字节码生成
JavaScript源码
抽像语法树(AST)
Java字节码
编译器前端
编译器后端
* 当前尚未完整...
Nashorn的对象模型
function Point(x, y) {
this.x = x;
this.y = y;
}
var p = new Point(2013, 42);
map
__proto__
context …
flags 0
spill null
arrayData
L0 x
L1 y
L2
L3
Key Getter Setter
“x” x getter x setter
“y” y getter ...
Nashorn的对象模型
function Point(x, y) {
this.x = x;
this.y = y;
}
var p = new Point(1, 2);
p.z = 3; p.a = 4; p.b = 5;
p[0] = 6...
map
__proto__
context …
flags 0
spill
arrayData
L0 x
L1 y
L2 z
L3 a
Key Getter Setter
“x” x getter x setter
“y” y getter y...
使用Nashorn
• 命令行解释器
• jjs / jrunscript
• 嵌入Java应用作为脚本使用
• 唯一公有API是JSR 223(javax.script)
• 系统脚本(shebang script)
Node.jar
• Java服务器端的JavaScript平台
• 正在不断研发中
• 集成了下列技术
• Node.js
• Nashorn
• Grizzly
• Java平台API
参考资料
• Nashorn, Jim Laskey, JVM Language Summit
2011
• CON5390 - Nashorn: Optimizing JavaScript
and Dynamic Language Execu...
更多关于JavaScript引擎的讨论
• 请参考HLLVM群组的讨论帖
• http://hllvm.group.iteye.com/group/topic/
37596
谢谢!
of 24

Nashorn on JDK 8 (ADC2013)

Brief introduction of Nashorn on JDK 8. Delivered at ADC 2013 (http://adc.alibabatech.org/), on July 14, 2013. Full version of slides coming soon.
Published on: Mar 3, 2016
Published in: Technology      News & Politics      
Source: www.slideshare.net


Transcripts - Nashorn on JDK 8 (ADC2013)

  • 1. Nashorn on JDK 8 莫枢(@RednaxelaFX)
  • 2. 关于我 • 编程语言及虚拟机爱好者 • 曾在淘宝和Oracle任职参与Java虚拟机相 关研发工作 • 博客:http://rednaxelafx.iteye.com/ • 微博:@RednaxelaFX
  • 3. 何为Nashorn?
  • 4. 何为Nashorn?
  • 5. 何为Nashorn?
  • 6. 何为Nashorn? http://www.battletanks.com/images/Nashorn-1.jpg
  • 7. 何为Nashorn? • Oracle的ECMAScript 5.1实现 • 运行于Java虚拟机上 • 全新的代码,100% Java实现 • OpenJDK项目 / JEP 174 • GPLv2 • 作为JDK的一部分随JDK8发布 • 替代原本的Rhino
  • 8. 为何Nashorn? • 改造Rhino? • 优势:现成的实现,功能完整 • 劣势:代码老旧,难以翻新
  • 9. 为何用Java实现JavaScript? • 充分利用Java平台已有的资源 • 成熟的GC • 成熟的JIT编译器 • 多线程支持 • 丰富的标准库和第三方库
  • 10. 为何用Java实现JavaScript? • JavaScript的标准库语义与Java相似 • 可以充分复用Java的标准库 • number -> java.lang.Double (*) • string -> java.lang.String • boolean -> java.lang.Boolean • Date -> java.util.Date (*) • RegExp -> java.util.regex.Pattern (*) • null -> null • undefined -> ? (Undefined)
  • 11. 为何用Java实现JavaScript? http://img.xgo-img.com.cn/9_500x375/8144.jpg
  • 12. 为何用Java实现JavaScript? http://cdn2.carsdata.net/pics/Hyundai/hyundai-coupe-fx-05.jpg
  • 13. 为何用Java实现JavaScript? http://encarsglobe.com/photo/md/ferrari-430/04/
  • 14. Nashorn的执行模型 • 纯编译,无解释器 • 从JavaScript源码编译为Java字节码 • 动态编译 • 延迟编译(lazy compilation)
  • 15. Nashorn的执行模型 词法分析 语法分析 常量折叠 控制流lowering 类型标注 值域分析 (*) 代码分离 类型固化 字节码生成 JavaScript源码 抽像语法树(AST) Java字节码 编译器前端 编译器后端 * 当前尚未完整实现
  • 16. Nashorn的对象模型 function Point(x, y) { this.x = x; this.y = y; } var p = new Point(2013, 42);
  • 17. map __proto__ context … flags 0 spill null arrayData L0 x L1 y L2 L3 Key Getter Setter “x” x getter x setter “y” y getter y setter map __proto__ … 2013 42 EMPTY_ARRAY
  • 18. Nashorn的对象模型 function Point(x, y) { this.x = x; this.y = y; } var p = new Point(1, 2); p.z = 3; p.a = 4; p.b = 5; p[0] = 6; p[1] = 7;
  • 19. map __proto__ context … flags 0 spill arrayData L0 x L1 y L2 z L3 a Key Getter Setter “x” x getter x setter “y” y getter y setter “z” z getter z setter “a” a getter a setter “b” b getter b setter map __proto__ … 1 2 0 6 1 7 b 5 3 4
  • 20. 使用Nashorn • 命令行解释器 • jjs / jrunscript • 嵌入Java应用作为脚本使用 • 唯一公有API是JSR 223(javax.script) • 系统脚本(shebang script)
  • 21. Node.jar • Java服务器端的JavaScript平台 • 正在不断研发中 • 集成了下列技术 • Node.js • Nashorn • Grizzly • Java平台API
  • 22. 参考资料 • Nashorn, Jim Laskey, JVM Language Summit 2011 • CON5390 - Nashorn: Optimizing JavaScript and Dynamic Language Execution on the JVM, JavaOne 2012 • BOF6661 - Nashorn, Node, and Java Persistence, JavaOne 2012
  • 23. 更多关于JavaScript引擎的讨论 • 请参考HLLVM群组的讨论帖 • http://hllvm.group.iteye.com/group/topic/ 37596
  • 24. 谢谢!

Related Documents