17. JSR‐292
Mission:
“We are extending the JVM with first-class architectural
support for languages other than Java, especially dynamic
languages. This project will prototype a number of
extensions to the JVM, so that it can run non-Java languages
efficiently, with a performance level comparable to that of
Java itself.” http://openjdk.java.net/projects/mlvm/
7/7/2011 Java 7 Launch Event
18. Compiling dynamic languages
• JVM pre]y language‐friendly
• ExcepLon: method calls
– Signature at callsite must match exactly
TargetClass Name Method descriptor
18:
invokevirtual
#5; //Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
– Dispatch on staLc type of parameters and dynamic
type of receiver
– Method must exist at compile Lme
– Link to target is fixed, no relinking
7/7/2011 Java 7 Launch Event
19. Compiling dynamic languages
• Common soluLons:
- Don’t compile, interpret (someLmes unavoidable)
- Introduce generic CallSite abstracLon which dispatches
method calls
- AOT compilaLon into specialized invoker classes
(suitable for core methods)
- JIT bytecode generaLon of small stub methods
Either way: abundance of syntheLc types and
bytecode hard to opLmize for JVM
7/7/2011 Java 7 Launch Event
20. Invokedynamic
New bytecode, last piece of JSR‐292 puzzle:
Name Method descriptor
18:
invokedynamic
#5; //NameAndType addInts:(II)I
• InvocaLon without reference to actual method
descriptor
• Instead, symbolic name and type
• No receiver: all arguments are equal
What is the target?
7/7/2011 Java 7 Launch Event
22. Method handles
• Lightweight, safe method pointers
• Like java.lang.reflect.Method, but:
– No argument boxing/unboxing
– Access checks only at creaLon Lme
– Leaner, can be as fast as direct call
– No wrapping of excepLons
Java 7
MethodHandle mh =
MethodHandles.lookup().findVirtual(String.class,
“substring”, typeDescriptor);
String java = (String) mh.invokeExact(“jjava”, 1);
7/7/2011 Java 7 Launch Event
28. Invokedynamic
• Invokedynamic + bootstrap method allow
language to up‐call from VM for linking/
dispatching.
Not impossible before, but hard and slow. JVM now
fully opLmizes dynamic calls.
7/7/2011 Java 7 Launch Event
29. Wrap‐up
• JSR‐292 invokedynamic features:
– Let’s language implementors avoid tricks
– Level the playing ground, speedwise
– Allow exisLng VM opLmizaLons to be applied to
new paradigms
• JRuby, Groovy acLvely working on JSR‐292
support
• For example, JRuby can cut 80% of linking/
calling code in runLme
7/7/2011 Java 7 Launch Event
35. JDK8
Available Fall/Winter of
See you @ next launch event?
7/7/2011 Java 7 Launch Event
Hinweis der Redaktion
\n
\n
\n
\n
\n
\n
\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen ‘werkelijkheid’ (volgende slide)\n
*Java (taal) bevat ook ficties!\n*Schoen gaat wringen wanneer language fictions realiteit van JVM moeten gaan verbergen/opleuken\n* Zelfs in Java (Generics) is dat merkbaar... dat is waar tradeoffs (snelheid/bruikaarheid/correctheid) ontstaan\n\nFocus on JRuby in this pres. since very active in JSR-292 \n
*Java (taal) bevat ook ficties!\n*Schoen gaat wringen wanneer language fictions realiteit van JVM moeten gaan verbergen/opleuken\n* Zelfs in Java (Generics) is dat merkbaar... dat is waar tradeoffs (snelheid/bruikaarheid/correctheid) ontstaan\n\nFocus on JRuby in this pres. since very active in JSR-292 \n
*Java (taal) bevat ook ficties!\n*Schoen gaat wringen wanneer language fictions realiteit van JVM moeten gaan verbergen/opleuken\n* Zelfs in Java (Generics) is dat merkbaar... dat is waar tradeoffs (snelheid/bruikaarheid/correctheid) ontstaan\n\nFocus on JRuby in this pres. since very active in JSR-292 \n
\n
* Started 2007/2008\n* Open-ended experiment from Sun. Wild ideas considered, but must prove useful to reach Java SE 7\n
\n
* for core types specialized invokers may be packaged with ruby (but: wasteful, 100s of small classes)\n
\n
* Signature polymorphism (there is no actual invoke method conforming to the MethodType)\n* results in invokevirtual call on MethodHandle class, which then dispatches to the correct code (if type sig matches!)\n* pass target object as first param when virtual method is concerned\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
This was already possible (hence the existing JVM languages), but is now architecturally supported. Therefore: easier to implement, more speed through optimizations etc.\n
JRuby may throw away 80-90% of it’s calling-runtime, and win enormously.\n