Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

The Java Virtual Machine is Over - The Polyglot VM is here - Marcus Lagergren (Oracle)

3,356 views

Published on

Presented at JAX London 2013

Ever since Java’s inception, in 1995, people have been compiling languages that aren’t Java to bytecode and deploying them on the JVM. Lately we are seeing an explosion in JVM languages. This is partly, but not only, because of Java 7, the first JVM to ship with invokedynamic, which is a quantum leap in polyglot runtime implementation. This session explains why emerging language implementations are becoming more common and more feasible to implement on the JVM with satisfactory performance.

Published in: Technology
  • Be the first to comment

The Java Virtual Machine is Over - The Polyglot VM is here - Marcus Lagergren (Oracle)

  1. 1. The JVM is dead! Long live the Polyglot VM! Marcus Lagergren Oracle
  2. 2. The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract.
 " It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle s products remains at the sole discretion of Oracle." 2 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  3. 3. Who am I? @lagergren 3 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  4. 4. Program Agenda §  Introduction §  History of VM languages and runtimes §  Emerging languages and language design on top of the JVM §  Invokedynamic §  The Nashorn project §  The Da Vinci Machine Project (MLVM) 4 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  5. 5. Introduction 5 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  6. 6. I am here to talk about… The Java Runtime: The JVM 6 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  7. 7. I am here to talk about… The Universal MetaExecution Environment 7 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  8. 8. I am here to talk about… The Universal MetaExecution Environment 8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  9. 9. I am here to talk about… The JVM as a multi language runtime 9 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  10. 10. I am here to talk about… The JVM as a multi language runtime (especially in the context of dynamic languages) 10 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  11. 11. History (what is a runtime anyway?) 11 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  12. 12. LISP 12 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  13. 13. LISP 1950s – First compiler in 1962 13 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  14. 14. LISP 1950s – First compiler in 1962 Just-in-time compilation 14 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  15. 15. LISP 1950s – First compiler in 1962 Just-in-time compilation 15 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  16. 16. LISP 1950s – First compiler in 1962 Just-in-time compilation GC – Reference Counting 16 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  17. 17. LISP 1950s – First compiler in 1962 Just-in-time compilation GC – Reference Counting 17 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  18. 18. Smalltalk 18 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  19. 19. Smalltalk First class library 19 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  20. 20. Smalltalk First class library First visual GUI driven IDE 20 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  21. 21. Smalltalk First class library First visual GUI driven IDE BYTECODE! 21 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  22. 22. Smalltalk First class library First visual GUI driven IDE BYTECODE! 22 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  23. 23. Emerging languages (especially on the JVM) 23 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  24. 24. Dynamic Languages 24 ActionScript Adenine APL BASIC BeanShell Clojure ColdFusion Dart Dylan Groovy E Fancy JavaScript Julia Lua MATLAB Objective-C Perl PHP Powershell Python Qore R REBOL REXX Ruby Scheme Smalltalk Snit Tcl VBScript Yoix etc etc etc etc… Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  25. 25. Dynamic Languages 25 ActionScript Adenine APL BASIC BeanShell Clojure ColdFusion Dart Dylan Groovy E Fancy JavaScript Julia Lua MATLAB Objective-C Perl PHP Powershell Python Qore R REBOL REXX Ruby Scheme Smalltalk Snit Tcl VBScript Yoix etc etc etc etc… Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  26. 26. Dynamic Languages •  26 Dynamic Languages are hot today because •  They are easy to use •  They have no explicit compile stage •  They have good code readability •  Allow short development time for small projects •  Performance is good enough Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  27. 27. Trendy Dynamic Languages 27 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  28. 28. Trendy Dynamic Languages 28 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  29. 29. Trendy Dynamic Languages 29 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  30. 30. Trendy Dynamic Languages 30 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  31. 31. Trendy Dynamic Languages Already on top of the JVM 31 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  32. 32. Trendy Dynamic Languages Already on top of the JVM 32 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  33. 33. … and of course V8, Futhark, Carakan, SpiderMonkey, JägerMonkey, *Monkey, Nitro, Rhino, Nashorn, etc etc 33 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  34. 34. 34 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  35. 35. 35 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  36. 36. 36 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  37. 37. 37 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  38. 38. Dynamic Languages – Implementation 38 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  39. 39. Dynamic Languages – Implementation •  39 Native Runtimes •  Ruby, Perl, Python, v8, *monkey etc Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  40. 40. Dynamic Languages – Implementation •  •  40 Native Runtimes •  Ruby, Perl, Python, v8, *monkey etc Metacircular •  PyPy, Steel Banks Common LISP, Rubinius (well partly), Smalltalk Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  41. 41. Dynamic Languages – Implementation •  •  •  41 Native Runtimes •  Ruby, Perl, Python, v8, *monkey etc Metacircular •  PyPy, Steel Banks Common LISP, Rubinius (well partly), Smalltalk On top of a (J)VM •  Clojure, Jython, JRuby, Rhino, Nashorn •  DLR/CLR Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  42. 42. Dynamic Languages – Implementation •  •  •  42 Native Runtimes •  Ruby, Perl, Python, v8, *monkey etc Metacircular •  PyPy, Steel Banks Common LISP, Rubinius (well partly), Smalltalk On top of a (J)VM •  Clojure, Jython, JRuby, Rhino, Nashorn •  DLR/CLR Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  43. 43. Dynamic Languages – Characteristics •  •  •  •  43 Most emerging JVM languages today are dynamic As opposed to “non-dynamic” I guess… What is a dynamic language? Is there a formal definition? Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  44. 44. Dynamic Languages – Characteristics •  •  44 Loosely typed Dynamic binding •  Resolve functions/members/calls at runtime rather than compile time Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  45. 45. Dynamic Languages – Characteristics •  45 Liberal redefinition policy •  Redefine/modify a class •  Redefine/modify a function Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  46. 46. Dynamic Languages – Characteristics •  46 Liberal redefinition policy •  Redefine/modify a class •  Redefine/modify a function •  Redefine a builtin even •  Oh, go to hell, JavaScript! Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Math.sin = function(x){ return 17; }
  47. 47. Dynamic Languages – Characteristics •  •  •  47 Code equals data eval / REPL Automatic memory management Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  48. 48. Dynamic Languages – Characteristics •  •  •  48 But you can extend Java at runtime too, can’t you? Maybe a “non dynamic” language is more like C? I don’t think the “dynamic” prefix matters much •  Things change at runtime – handle it Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  49. 49. Putting your language on top of the JVM 49 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  50. 50. Why? •  50 You get so much for free •  Automatic memory management •  State of the art JIT optimizations •  Native threading capability •  Hybridization (JSR-223) •  Man decades of high tech Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  51. 51. Why? Code bases 500000 400000 300000 200000 100000 0 51 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Lines
  52. 52. Why? Code bases 500000 400000 300000 200000 100000 0 Lines If it were all about code complexity – TOTALLY WORTH IT! 52 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  53. 53. “All problems in computer science can be solved by another level of indirection” - David Wheeler 53 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  54. 54. “All problems in computer science can be solved by another level of indirection” - David Wheeler •  •  •  54 Sounds good! Implement it! Just serve up some bytecode People have been doing it since 1996 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  55. 55. They have been doing it a lot, actually… jgo ANTLR Jaskell Gosu Fortress Nice ABCL X10 Erjang BeanShell Jacl 55 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Fantom
  56. 56. “All problems in computer science can be solved by another level of indirection” - David Wheeler 56 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  57. 57. “All problems in computer science can be solved by another level of indirection” - David Wheeler “Except for the problem of too many layers of indirection” - Kevlin Henney 57 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  58. 58. So why is it hard? 58 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  59. 59. So why is it hard? •  •  •  59 Different levels of “hard” Square peg, round hole or round peg, oval hole? Scala is a fairly good fit* Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  60. 60. So why is it hard? •  •  •  •  60 Different levels of “hard” Square peg, round hole or round peg, oval hole? Scala is a fairly good fit* yes I know about tail call optimization and interface injection – also I was at JVMLS 2013 which left me with mental scars. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  61. 61. So why is it hard? •  •  •  •  61 Different levels of “hard” Square peg, round hole or round peg, oval hole? Scala is a fairly good fit Ruby or JavaScript are (at least at first glance) pretty lousy ones Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  62. 62. So why is it hard? •  •  •  62 Java bytecode [sic] •  Notice the “Java” There are “classes”, “methods”, size limitations, strong types Languages can be much more dynamic than Java •  Different linkage •  Loose types Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  63. 63. Not every language has exactly 5 strong types int, long, float, double, Object int sum(int a, int b) { return a + b; } 63 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  64. 64. Not every language has exactly 5 strong types int, long, float, double, Object iload_1 iload_2 iadd ireturn 64 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  65. 65. Not every language has exactly 5 strong types int, long, float, double, Object function sum(a, b) { return a + b; } 65 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  66. 66. Not every language has exactly 5 strong types int, long, float, double, Object ???? ???? ???? ???? 66 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  67. 67. Not every language has exactly 5 strong types int, long, float, double, Object ???? ???? ???? ???? 67 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  68. 68. Also: it is hard to swap out code with other code 68 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  69. 69. Also: it is hard to swap out code with other code 69 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  70. 70. Applicability and performance •  •  70 The extra layer costs us performance How can we work around it? Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  71. 71. Applicability and performance •  •  •  71 The extra layer costs us performance How can we work around it? Passive •  Just wait •  JIT is getting better all the time, GC is getting better all the time Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  72. 72. Applicability and performance •  •  •  •  72 The extra layer costs us performance How can we work around it? Passive •  Just wait •  JIT is getting better all the time, GC is getting better all the time Active •  Punch through the indirection layer •  There are tools these days Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  73. 73. Punch through the indirection layer invokedynamic is my ice pick! 73 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  74. 74. Invokedynamic •  •  •  •  •  74 The first new bytecode since 1996 More than new type of call Breaks the constraints of Java call/linkage Can implement calls that act like function pointers More general: can implement custom data access Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  75. 75. The whole point: The JVM can optimize this! 75 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  76. 76. invokedynamic bytecode 76 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  77. 77. invokedynamic bytecode Calls (once) Bootstrap Method 77 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  78. 78. invokedynamic bytecode Calls (once) Bootstrap Method Returns CallSite java.lang.invoke.CallSite 78 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  79. 79. invokedynamic bytecode Calls (once) Bootstrap Method Returns CallSite java.lang.invoke.CallSite Contains Target java.lang.invoke.MethodHandle 79 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  80. 80. Example – bootstrap public static CallSite bootstrap( MethodHandles.Lookup lookup, String name, MethodType type, Object... metainfo) { //optional MethodHandle mh = lookup.findStaticMethod( getClass(), name, type); return new MyMutableCallsite(mh, metainfo); } 80 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  81. 81. Example – java.lang.invoke •  •  •  81 MutableCallSite (ConstantCallSite) •  setTarget, getTarget MethodHandles •  guardWithTest •  filterArguments •  filterReturnValue •  dropArguments •  etc SwitchPoint Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  82. 82. Example – dynamic invocation •  Parameter types known only at run time function add(a, b) { return a + b; } var res = add(f(), g()); 82 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  83. 83. Example – dynamic invocation •  Parameter types known only at run time function add(a, b) { return a + b; } var res = add(f(), g()); int add_int(int a, int b) { return a + b; } 83 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  84. 84. Example – dynamic invocation •  Parameter types known only at run time function add(a, b) { return a + b; } var res = add(f(), g()); int add_int(int a, int b) { return a + b; } Object add_obj(Object a, Object b){ return JavaScript.ADD(a, b); } 84 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  85. 85. Example – dynamic invocation •  Parameter types known only at run time var res = add(f(), g()); 85 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  86. 86. Example – dynamic invocation •  Parameter types known only at run time var res = add(f(), g()); boolean intsGuard(Object a, Object b) { return a.getClass() == Integer.class && b.getClass() == Integer.class; } 86 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  87. 87. Example – dynamic invocation •  Parameter types known only at run time var res = add(f(), g()); boolean intsGuard(Object a, Object b) { return a.getClass() == Integer.class && b.getClass() == Integer.class; } MethodHandle ADD = MethodHandles.guardWithTest( intsGuard, add_int, add_obj); Object res = ADD(f(), g()); 87 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  88. 88. Example – function call reassignment function return } function return } function return } 88 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. square(x) { x * x; multiply(x) { x * 2; compute(x) { square(x) + multiply(x);
  89. 89. Example – function call reassignment function return } function return } function return } multiply return } 89 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. square(x) { x * x; multiply(x) { x * 2; compute(x) { square(x) + multiply(x); = function(x) { x * 3;
  90. 90. Example – function call reassignment UH OH! 90 function return } function return } function return } multiply return } Copyright © 2013, Oracle and/or its affiliates. All rights reserved. square(x) { x * x; multiply(x) { x * 2; compute(x) { square(x) + multiply(x); = function(x) { x * 3;
  91. 91. Example – lazy constant initialization •  •  91 Call site with one value, available only at runtime •  The “static final” approach won’t work Value calculated once and remains immutable Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  92. 92. Example – lazy constant initialization •  •  Call site with one value, available only at runtime •  The “static final” approach won’t work Value calculated once and remains immutable return new ConstantCallSite( MethodHandles.constant( Data.class, loadDataFromDataBase()); 92 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  93. 93. Java 8 also uses invokedynamic (Delegators with lambda) 93 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  94. 94. The Nashorn Project 94 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  95. 95. What is Nashorn? •  •  •  •  •  •  95 Nashorn is a 100% pure Java runtime for JavaScript Nashorn generates bytecode •  Invokedynamics are everywhere Nashorn currently performs somewhere on the order of ~2-10x better than Rhino Nashorn is in JDK 8 Nashorn is 100% ECMAScript compliant Nashorn has a well thought through security model Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  96. 96. Why Nashorn? •  •  •  96 Started as an invokedynamic POC. Rhino is still alive today after ~18 years. Why? •  JSR-223 Nashorn is now mature and replaces Rhino for Java 8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  97. 97. 97 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  98. 98. 98 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  99. 99. Rationale – JavaScript? •  •  •  99 Extremely dynamic •  All (well, most) setters, getters, calls, have to be invokedynamics Rhino is slow and old JSR-223 •  Should make it easy to provide POC apps for Nashorn Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  100. 100. Rationale 100 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  101. 101. Full ECMAScript compliance 101 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  102. 102. Performance 8 7 6 5 4 3 2 1 0 rhino nashorn nashorn rhino 102 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  103. 103. Performance 8 7 6 5 4 3 2 1 0 rhino nashorn nashorn rhino 103 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  104. 104. Nashorn current performance status •  104 As of late August: •  No longer understaffed for performance •  We should try for native-like performance by •  Modifying the JVM’s invokedynamic implementation •  Changing Nashorn’s currently conservative type model. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  105. 105. Nashorn current performance status •  105 Key to native like performance •  In Nashorn: replace conservative types with optimistic ones – implement rollback mechanism •  In the VM: math intrinsics (done), lambdaform performance, better inlining, boxing Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  106. 106. Nashorn current performance status •  106 (Very) initial POC after 2.5 weeks of work: •  Broke out octane.crypto.am3 – the hotspot in the Crypto benchmark in octane. •  Turned it into microbenchmark Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  107. 107. Nashorn current performance status •  107 Runtime •  Rhino (with –opt 9): •  Nashorn tip: •  V8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 34.6 s 10.8 s 1.3 s
  108. 108. Nashorn with optimistic types •  108 Runtime •  Rhino (with –opt 9): •  Nashorn tip: •  V8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 34.6 s 5.8 s 1.3 s
  109. 109. Add JVM math intrinsics… •  109 Runtime •  Rhino (with –opt 9): •  Nashorn tip: •  V8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 34.6 s 4.4 s 1.3 s
  110. 110. Patch JVM to keep more type info while inlining… •  110 Runtime •  Rhino (with –opt 9): •  Nashorn tip: •  V8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 34.6 s 2.5 s 1.3 s
  111. 111. More information •  •  We now run larger apps My JVMLS 2013 talk “Nashorn War Stories” •  •  http://tinyurl.com/nashorn-war-stories-slides http://tinyurl.com/nashorn-war-stories (unshortened URLs) http://www.slideshare.net/lagergren/lagergren-jvmls2013final http://medianetwork.oracle.com/video/player/2630340183001 111 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  112. 112. Nashorn on the Server: Avatar.js •  Server side JavaScript on the JVM An implementation of the node programming model •  For writing enterprise applications in Java and JavaScript Automatically provides seamless integration with existing Java libraries Parallelism / background Java threads Small enough for the embedded space •  http://avatar-js.java.net •  •  •  •  112 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  113. 113. Further POC: Askari Debugger •  •  •  113 Debugger for Nashorn written in Nashorn Replace / view code while writing it 3 weeks of work to get it up and running Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  114. 114. Nashorn already in OpenJDK 8 Now: more Nashorn performance enhancements Now: more JVM performance enhancements 114 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  115. 115. Contribute! 1.  Ask the community to contribute functionality, testing, performance [analysis], bug fixes, library optimizations, browser simulation frameworks, kick-ass hybrid Java solutions. JVM optimizations 2.  … 3.  PROFIT! blogs.oracle.com/nashorn nashorn-dev@openjdk.java.net 115 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  116. 116. The Da Vinci Machine Project 116 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  117. 117. Can we do better than the ice pick? 117 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  118. 118. Can we do better than the ice pick? •  118 Reshape the hole! Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  119. 119. Let’s continue building our “future VM” •  •  •  An open source incubator for JVM futures Contains code fragments (patches) Migration to OpenJDK requires •  A standard •  A feature release plan mlvm-dev@openjdk.java.net 119 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  120. 120. Da Vinci Machine Patches 120 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  121. 121. It’s not just invokedynamic! The JVM is evolving to become the multi-language runtime 121 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  122. 122. Thank you! Q&A? @lagergren 122 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

×