Nashorn on JDK 8 (ADC2013)

1,438 views

Published on

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 in: Technology, News & Politics
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,438
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
23
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Nashorn on JDK 8 (ADC2013)

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

×