SlideShare ist ein Scribd-Unternehmen logo
1 von 122
Downloaden Sie, um offline zu lesen
The JVM is dead!
Long live the Polyglot VM!
Marcus Lagergren
Oracle
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.
Who am I?

@lagergren
3

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
Introduction
5

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
I am here to talk about…

The Java Runtime:
The JVM
6

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
I am here to talk about…

The Universal MetaExecution Environment
7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
I am here to talk about…

The Universal MetaExecution Environment
8

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
I am here to talk about…

The JVM as a multi
language runtime
9

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
History
(what is a runtime
anyway?)
11

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
LISP

12

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
LISP

1950s – First compiler in 1962

13

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
LISP

1950s – First compiler in 1962
Just-in-time compilation
14

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
LISP

1950s – First compiler in 1962
Just-in-time compilation
15

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
LISP

1950s – First compiler in 1962
Just-in-time compilation
GC – Reference Counting
16

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
LISP

1950s – First compiler in 1962
Just-in-time compilation
GC – Reference Counting
17

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Smalltalk

18

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Smalltalk

First class library

19

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Smalltalk

First class library
First visual GUI driven IDE
20

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Smalltalk

First class library
First visual GUI driven IDE
BYTECODE!
21

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Smalltalk

First class library
First visual GUI driven IDE
BYTECODE!
22

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Emerging languages
(especially on the
JVM)
23

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
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.
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.
Trendy Dynamic Languages

27

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Trendy Dynamic Languages

28

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Trendy Dynamic Languages

29

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Trendy Dynamic Languages

30

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Trendy Dynamic Languages

Already on top of the JVM

31

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Trendy Dynamic Languages

Already on top of the JVM

32

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
… 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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
35

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
36

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
37

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Dynamic Languages – Implementation

38

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Dynamic Languages – Implementation
• 

39

Native Runtimes
• 
Ruby, Perl, Python, v8, *monkey etc

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
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.
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.
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.
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.
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.
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;
}
Dynamic Languages – Characteristics
• 
• 
• 

47

Code equals data
eval / REPL
Automatic memory management

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
Putting your language
on top of the JVM

49

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
Why?

Code bases
500000
400000
300000
200000
100000
0

51

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

Lines
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.
“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.
“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.
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
“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.
“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.
So why is it hard?

58

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
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.
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.
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.
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.
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.
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.
Not every language has exactly 5 strong types
int, long, float, double, Object
????
????
????
????

66

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Not every language has exactly 5 strong types
int, long, float, double, Object
????
????
????
????

67

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Also: it is hard to swap out
code with other code

68

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Also: it is hard to swap out
code with other code

69

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
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.
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.
Punch through the indirection layer
invokedynamic is my ice pick!

73

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
The whole point:

The JVM can
optimize this!
75

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
invokedynamic
bytecode

76

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
invokedynamic
bytecode

Calls (once)

Bootstrap Method

77

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
invokedynamic
bytecode

Calls (once)

Bootstrap Method
Returns
CallSite

java.lang.invoke.CallSite

78

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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);
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;
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;
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.
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.
Java 8 also uses
invokedynamic
(Delegators with lambda)

93

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
The Nashorn Project

94

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
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

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
98

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
Rationale

100

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Full ECMAScript compliance

101

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
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.
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.
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.
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.
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
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
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
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
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.
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.
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.
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.
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.
The Da Vinci Machine
Project

116

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Can we do better than the ice pick?

117

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Can we do better than the ice pick?

• 

118

Reshape the hole!

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
Da Vinci Machine Patches

120

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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.
Thank you!

Q&A?
@lagergren

122

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

Weitere ähnliche Inhalte

Was ist angesagt?

Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimesEclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimesMark Stoodley
 
Free community with deep roots
Free community with deep rootsFree community with deep roots
Free community with deep rootsMartijn Verburg
 
The Most Valuable Customer on Earth-1298: Comic Book Analysis with Oracel's B...
The Most Valuable Customer on Earth-1298: Comic Book Analysis with Oracel's B...The Most Valuable Customer on Earth-1298: Comic Book Analysis with Oracel's B...
The Most Valuable Customer on Earth-1298: Comic Book Analysis with Oracel's B...DataWorks Summit
 
Open arkcompiler
Open arkcompilerOpen arkcompiler
Open arkcompileryiwei yang
 
GraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
GraphPipe - Blazingly Fast Machine Learning Inference by Vish AbramsGraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
GraphPipe - Blazingly Fast Machine Learning Inference by Vish AbramsOracle Developers
 
8th TUC Meeting - David Meibusch, Nathan Hawes (Oracle Labs Australia). Frapp...
8th TUC Meeting - David Meibusch, Nathan Hawes (Oracle Labs Australia). Frapp...8th TUC Meeting - David Meibusch, Nathan Hawes (Oracle Labs Australia). Frapp...
8th TUC Meeting - David Meibusch, Nathan Hawes (Oracle Labs Australia). Frapp...LDBC council
 
OpenJDK: How to Join In on All the Fun [JavaOne 2017 CON3667]
OpenJDK: How to Join In on All the Fun [JavaOne 2017 CON3667]OpenJDK: How to Join In on All the Fun [JavaOne 2017 CON3667]
OpenJDK: How to Join In on All the Fun [JavaOne 2017 CON3667]David Buck
 
Google ART (Android RunTime)
Google ART (Android RunTime)Google ART (Android RunTime)
Google ART (Android RunTime)Niraj Solanke
 
Adopt-a-JSR for JSON Processing 1.1, JSR 374
Adopt-a-JSR for JSON Processing 1.1, JSR 374Adopt-a-JSR for JSON Processing 1.1, JSR 374
Adopt-a-JSR for JSON Processing 1.1, JSR 374Heather VanCura
 
Go - A Key Language in Enterprise Application Development?
Go - A Key Language in Enterprise Application Development?Go - A Key Language in Enterprise Application Development?
Go - A Key Language in Enterprise Application Development?C4Media
 
D conf 2016 - Using D for Primary Storage
D conf 2016 - Using D for Primary StorageD conf 2016 - Using D for Primary Storage
D conf 2016 - Using D for Primary StorageLiran Zvibel
 
Open hours home security | Episode 70
Open hours home security | Episode 70Open hours home security | Episode 70
Open hours home security | Episode 70Robert Wolff
 
C++11 Was Only the Beginning
C++11 Was Only the BeginningC++11 Was Only the Beginning
C++11 Was Only the BeginningMateusz Pusz
 
Introduction to ROS (Robot Operating System)
Introduction to ROS (Robot Operating System) Introduction to ROS (Robot Operating System)
Introduction to ROS (Robot Operating System) hvcoup
 
Technology Roundup - Programming Languages & Paradigms
Technology Roundup - Programming Languages & ParadigmsTechnology Roundup - Programming Languages & Paradigms
Technology Roundup - Programming Languages & ParadigmsAshish Belagali
 

Was ist angesagt? (19)

Slovenian Oracle User Group
Slovenian Oracle User GroupSlovenian Oracle User Group
Slovenian Oracle User Group
 
Imworld.ro
Imworld.roImworld.ro
Imworld.ro
 
Eclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimesEclipse OMR: a modern toolkit for building language runtimes
Eclipse OMR: a modern toolkit for building language runtimes
 
Free community with deep roots
Free community with deep rootsFree community with deep roots
Free community with deep roots
 
JAVA FPGA An Application for Space af Jens A. Hansen, CISS
JAVA FPGA An Application for Space af Jens A. Hansen, CISSJAVA FPGA An Application for Space af Jens A. Hansen, CISS
JAVA FPGA An Application for Space af Jens A. Hansen, CISS
 
The Most Valuable Customer on Earth-1298: Comic Book Analysis with Oracel's B...
The Most Valuable Customer on Earth-1298: Comic Book Analysis with Oracel's B...The Most Valuable Customer on Earth-1298: Comic Book Analysis with Oracel's B...
The Most Valuable Customer on Earth-1298: Comic Book Analysis with Oracel's B...
 
Open arkcompiler
Open arkcompilerOpen arkcompiler
Open arkcompiler
 
GraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
GraphPipe - Blazingly Fast Machine Learning Inference by Vish AbramsGraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
GraphPipe - Blazingly Fast Machine Learning Inference by Vish Abrams
 
8th TUC Meeting - David Meibusch, Nathan Hawes (Oracle Labs Australia). Frapp...
8th TUC Meeting - David Meibusch, Nathan Hawes (Oracle Labs Australia). Frapp...8th TUC Meeting - David Meibusch, Nathan Hawes (Oracle Labs Australia). Frapp...
8th TUC Meeting - David Meibusch, Nathan Hawes (Oracle Labs Australia). Frapp...
 
OpenJDK: How to Join In on All the Fun [JavaOne 2017 CON3667]
OpenJDK: How to Join In on All the Fun [JavaOne 2017 CON3667]OpenJDK: How to Join In on All the Fun [JavaOne 2017 CON3667]
OpenJDK: How to Join In on All the Fun [JavaOne 2017 CON3667]
 
Google ART (Android RunTime)
Google ART (Android RunTime)Google ART (Android RunTime)
Google ART (Android RunTime)
 
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
 
Adopt-a-JSR for JSON Processing 1.1, JSR 374
Adopt-a-JSR for JSON Processing 1.1, JSR 374Adopt-a-JSR for JSON Processing 1.1, JSR 374
Adopt-a-JSR for JSON Processing 1.1, JSR 374
 
Go - A Key Language in Enterprise Application Development?
Go - A Key Language in Enterprise Application Development?Go - A Key Language in Enterprise Application Development?
Go - A Key Language in Enterprise Application Development?
 
D conf 2016 - Using D for Primary Storage
D conf 2016 - Using D for Primary StorageD conf 2016 - Using D for Primary Storage
D conf 2016 - Using D for Primary Storage
 
Open hours home security | Episode 70
Open hours home security | Episode 70Open hours home security | Episode 70
Open hours home security | Episode 70
 
C++11 Was Only the Beginning
C++11 Was Only the BeginningC++11 Was Only the Beginning
C++11 Was Only the Beginning
 
Introduction to ROS (Robot Operating System)
Introduction to ROS (Robot Operating System) Introduction to ROS (Robot Operating System)
Introduction to ROS (Robot Operating System)
 
Technology Roundup - Programming Languages & Paradigms
Technology Roundup - Programming Languages & ParadigmsTechnology Roundup - Programming Languages & Paradigms
Technology Roundup - Programming Languages & Paradigms
 

Andere mochten auch

Introducing Vert.x 2.0 - Taking polyglot application development to the next ...
Introducing Vert.x 2.0 - Taking polyglot application development to the next ...Introducing Vert.x 2.0 - Taking polyglot application development to the next ...
Introducing Vert.x 2.0 - Taking polyglot application development to the next ...jaxLondonConference
 
Real-world polyglot programming on the JVM - Ben Summers (ONEIS)
Real-world polyglot programming on the JVM  - Ben Summers (ONEIS)Real-world polyglot programming on the JVM  - Ben Summers (ONEIS)
Real-world polyglot programming on the JVM - Ben Summers (ONEIS)jaxLondonConference
 
Garbage Collection: the Useful Parts - Martijn Verburg & Dr John Oliver (jCla...
Garbage Collection: the Useful Parts - Martijn Verburg & Dr John Oliver (jCla...Garbage Collection: the Useful Parts - Martijn Verburg & Dr John Oliver (jCla...
Garbage Collection: the Useful Parts - Martijn Verburg & Dr John Oliver (jCla...jaxLondonConference
 
Design is a Process, not an Artefact - Trisha Gee (MongoDB)
Design is a Process, not an Artefact - Trisha Gee (MongoDB)Design is a Process, not an Artefact - Trisha Gee (MongoDB)
Design is a Process, not an Artefact - Trisha Gee (MongoDB)jaxLondonConference
 
Databases and agile development - Dwight Merriman (MongoDB)
Databases and agile development - Dwight Merriman (MongoDB)Databases and agile development - Dwight Merriman (MongoDB)
Databases and agile development - Dwight Merriman (MongoDB)jaxLondonConference
 
Lambda Expressions: Myths and Mistakes - Richard Warburton (jClarity)
Lambda Expressions: Myths and Mistakes - Richard Warburton (jClarity)Lambda Expressions: Myths and Mistakes - Richard Warburton (jClarity)
Lambda Expressions: Myths and Mistakes - Richard Warburton (jClarity)jaxLondonConference
 
Interactive media applications
Interactive media applicationsInteractive media applications
Interactive media applicationsNicole174
 
A real-time architecture using Hadoop & Storm - Nathan Bijnens & Geert Van La...
A real-time architecture using Hadoop & Storm - Nathan Bijnens & Geert Van La...A real-time architecture using Hadoop & Storm - Nathan Bijnens & Geert Van La...
A real-time architecture using Hadoop & Storm - Nathan Bijnens & Geert Van La...jaxLondonConference
 
Practical Performance: Understand the Performance of Your Application - Chris...
Practical Performance: Understand the Performance of Your Application - Chris...Practical Performance: Understand the Performance of Your Application - Chris...
Practical Performance: Understand the Performance of Your Application - Chris...jaxLondonConference
 
Big data from the LHC commissioning: practical lessons from big science - Sim...
Big data from the LHC commissioning: practical lessons from big science - Sim...Big data from the LHC commissioning: practical lessons from big science - Sim...
Big data from the LHC commissioning: practical lessons from big science - Sim...jaxLondonConference
 
Streams and Things - Darach Ennis (Ubiquiti Networks)
Streams and Things - Darach Ennis (Ubiquiti Networks)Streams and Things - Darach Ennis (Ubiquiti Networks)
Streams and Things - Darach Ennis (Ubiquiti Networks)jaxLondonConference
 
The state of the art biorepository at ILRI
The state of the art biorepository at ILRIThe state of the art biorepository at ILRI
The state of the art biorepository at ILRIAbsolomon Kihara
 
How Java got its Mojo Back - James Governor (Redmonk)
How Java got its Mojo Back - James Governor (Redmonk)					How Java got its Mojo Back - James Governor (Redmonk)
How Java got its Mojo Back - James Governor (Redmonk) jaxLondonConference
 
Are you better than a coin toss? - Richard Warbuton & John Oliver (jClarity)
Are you better than a coin toss?  - Richard Warbuton & John Oliver (jClarity)Are you better than a coin toss?  - Richard Warbuton & John Oliver (jClarity)
Are you better than a coin toss? - Richard Warbuton & John Oliver (jClarity)jaxLondonConference
 
Designing and Building a Graph Database Application - Ian Robinson (Neo Techn...
Designing and Building a Graph Database Application - Ian Robinson (Neo Techn...Designing and Building a Graph Database Application - Ian Robinson (Neo Techn...
Designing and Building a Graph Database Application - Ian Robinson (Neo Techn...jaxLondonConference
 
Scaling Scala to the database - Stefan Zeiger (Typesafe)
Scaling Scala to the database - Stefan Zeiger (Typesafe)Scaling Scala to the database - Stefan Zeiger (Typesafe)
Scaling Scala to the database - Stefan Zeiger (Typesafe)jaxLondonConference
 
How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...
How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...
How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...jaxLondonConference
 
How Windows 10 will change the way we use devices
How Windows 10 will change the way we use devicesHow Windows 10 will change the way we use devices
How Windows 10 will change the way we use devicesCommelius Solutions
 
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...jaxLondonConference
 

Andere mochten auch (20)

Introducing Vert.x 2.0 - Taking polyglot application development to the next ...
Introducing Vert.x 2.0 - Taking polyglot application development to the next ...Introducing Vert.x 2.0 - Taking polyglot application development to the next ...
Introducing Vert.x 2.0 - Taking polyglot application development to the next ...
 
Real-world polyglot programming on the JVM - Ben Summers (ONEIS)
Real-world polyglot programming on the JVM  - Ben Summers (ONEIS)Real-world polyglot programming on the JVM  - Ben Summers (ONEIS)
Real-world polyglot programming on the JVM - Ben Summers (ONEIS)
 
Garbage Collection: the Useful Parts - Martijn Verburg & Dr John Oliver (jCla...
Garbage Collection: the Useful Parts - Martijn Verburg & Dr John Oliver (jCla...Garbage Collection: the Useful Parts - Martijn Verburg & Dr John Oliver (jCla...
Garbage Collection: the Useful Parts - Martijn Verburg & Dr John Oliver (jCla...
 
Design is a Process, not an Artefact - Trisha Gee (MongoDB)
Design is a Process, not an Artefact - Trisha Gee (MongoDB)Design is a Process, not an Artefact - Trisha Gee (MongoDB)
Design is a Process, not an Artefact - Trisha Gee (MongoDB)
 
Databases and agile development - Dwight Merriman (MongoDB)
Databases and agile development - Dwight Merriman (MongoDB)Databases and agile development - Dwight Merriman (MongoDB)
Databases and agile development - Dwight Merriman (MongoDB)
 
Lambda Expressions: Myths and Mistakes - Richard Warburton (jClarity)
Lambda Expressions: Myths and Mistakes - Richard Warburton (jClarity)Lambda Expressions: Myths and Mistakes - Richard Warburton (jClarity)
Lambda Expressions: Myths and Mistakes - Richard Warburton (jClarity)
 
Interactive media applications
Interactive media applicationsInteractive media applications
Interactive media applications
 
A real-time architecture using Hadoop & Storm - Nathan Bijnens & Geert Van La...
A real-time architecture using Hadoop & Storm - Nathan Bijnens & Geert Van La...A real-time architecture using Hadoop & Storm - Nathan Bijnens & Geert Van La...
A real-time architecture using Hadoop & Storm - Nathan Bijnens & Geert Van La...
 
Why other ppl_dont_get_it
Why other ppl_dont_get_itWhy other ppl_dont_get_it
Why other ppl_dont_get_it
 
Practical Performance: Understand the Performance of Your Application - Chris...
Practical Performance: Understand the Performance of Your Application - Chris...Practical Performance: Understand the Performance of Your Application - Chris...
Practical Performance: Understand the Performance of Your Application - Chris...
 
Big data from the LHC commissioning: practical lessons from big science - Sim...
Big data from the LHC commissioning: practical lessons from big science - Sim...Big data from the LHC commissioning: practical lessons from big science - Sim...
Big data from the LHC commissioning: practical lessons from big science - Sim...
 
Streams and Things - Darach Ennis (Ubiquiti Networks)
Streams and Things - Darach Ennis (Ubiquiti Networks)Streams and Things - Darach Ennis (Ubiquiti Networks)
Streams and Things - Darach Ennis (Ubiquiti Networks)
 
The state of the art biorepository at ILRI
The state of the art biorepository at ILRIThe state of the art biorepository at ILRI
The state of the art biorepository at ILRI
 
How Java got its Mojo Back - James Governor (Redmonk)
How Java got its Mojo Back - James Governor (Redmonk)					How Java got its Mojo Back - James Governor (Redmonk)
How Java got its Mojo Back - James Governor (Redmonk)
 
Are you better than a coin toss? - Richard Warbuton & John Oliver (jClarity)
Are you better than a coin toss?  - Richard Warbuton & John Oliver (jClarity)Are you better than a coin toss?  - Richard Warbuton & John Oliver (jClarity)
Are you better than a coin toss? - Richard Warbuton & John Oliver (jClarity)
 
Designing and Building a Graph Database Application - Ian Robinson (Neo Techn...
Designing and Building a Graph Database Application - Ian Robinson (Neo Techn...Designing and Building a Graph Database Application - Ian Robinson (Neo Techn...
Designing and Building a Graph Database Application - Ian Robinson (Neo Techn...
 
Scaling Scala to the database - Stefan Zeiger (Typesafe)
Scaling Scala to the database - Stefan Zeiger (Typesafe)Scaling Scala to the database - Stefan Zeiger (Typesafe)
Scaling Scala to the database - Stefan Zeiger (Typesafe)
 
How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...
How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...
How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...
 
How Windows 10 will change the way we use devices
How Windows 10 will change the way we use devicesHow Windows 10 will change the way we use devices
How Windows 10 will change the way we use devices
 
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
Are Hypermedia APIs Just Hype? - Aaron Phethean (Temenos) & Daniel Feist (Mul...
 

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

Graal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution PlatformGraal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution PlatformThomas Wuerthinger
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsDavid Delabassee
 
10 Building Blocks for Enterprise JavaScript
10 Building Blocks for Enterprise JavaScript10 Building Blocks for Enterprise JavaScript
10 Building Blocks for Enterprise JavaScriptGeertjan Wielenga
 
Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019Shaun Smith
 
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]David Buck
 
Serverless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsDavid Delabassee
 
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěJaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěDevelcz
 
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...AMD Developer Central
 
Владимир Иванов (Oracle): Java: прошлое и будущее
Владимир Иванов (Oracle): Java: прошлое и будущееВладимир Иванов (Oracle): Java: прошлое и будущее
Владимир Иванов (Oracle): Java: прошлое и будущееOlga Lavrentieva
 
Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl Jeff Smith
 
Geek out 2014-lagergren-final
Geek out 2014-lagergren-finalGeek out 2014-lagergren-final
Geek out 2014-lagergren-finalMarcus Lagergren
 
“Quantum” Performance Effects: beyond the Core
“Quantum” Performance Effects: beyond the Core“Quantum” Performance Effects: beyond the Core
“Quantum” Performance Effects: beyond the CoreC4Media
 
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584] Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584] David Buck
 
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav TulachJDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav TulachPROIDEA
 
Java è il linguaggio dell’IoT - Weaver
Java è il linguaggio dell’IoT - WeaverJava è il linguaggio dell’IoT - Weaver
Java è il linguaggio dell’IoT - WeaverCodemotion
 
Diagnose Your Microservices
Diagnose Your MicroservicesDiagnose Your Microservices
Diagnose Your MicroservicesMarcus Hirt
 

Ähnlich wie The Java Virtual Machine is Over - The Polyglot VM is here - Marcus Lagergren (Oracle) (20)

Graal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution PlatformGraal VM: Multi-Language Execution Platform
Graal VM: Multi-Language Execution Platform
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & Triumphs
 
Java 101
Java 101Java 101
Java 101
 
10 Building Blocks for Enterprise JavaScript
10 Building Blocks for Enterprise JavaScript10 Building Blocks for Enterprise JavaScript
10 Building Blocks for Enterprise JavaScript
 
Jax keynote
Jax keynoteJax keynote
Jax keynote
 
Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019
 
Session at Oredev 2016.
Session at Oredev 2016.Session at Oredev 2016.
Session at Oredev 2016.
 
Serverless Kotlin
Serverless KotlinServerless Kotlin
Serverless Kotlin
 
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
Bytecode Verification, the Hero That Java Needs [JavaOne 2016 CON1500]
 
Serverless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and Triumphs
 
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěJaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
 
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
 
Владимир Иванов (Oracle): Java: прошлое и будущее
Владимир Иванов (Oracle): Java: прошлое и будущееВладимир Иванов (Oracle): Java: прошлое и будущее
Владимир Иванов (Oracle): Java: прошлое и будущее
 
Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl Change Management for Oracle Database with SQLcl
Change Management for Oracle Database with SQLcl
 
Geek out 2014-lagergren-final
Geek out 2014-lagergren-finalGeek out 2014-lagergren-final
Geek out 2014-lagergren-final
 
“Quantum” Performance Effects: beyond the Core
“Quantum” Performance Effects: beyond the Core“Quantum” Performance Effects: beyond the Core
“Quantum” Performance Effects: beyond the Core
 
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584] Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
Let’s Write Our Own Chip-8 Interpreter! [JavaOne 2017 CON3584]
 
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav TulachJDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
JDD2015: Towards the Fastest (J)VM on the Planet! - Jaroslav Tulach
 
Java è il linguaggio dell’IoT - Weaver
Java è il linguaggio dell’IoT - WeaverJava è il linguaggio dell’IoT - Weaver
Java è il linguaggio dell’IoT - Weaver
 
Diagnose Your Microservices
Diagnose Your MicroservicesDiagnose Your Microservices
Diagnose Your Microservices
 

Mehr von jaxLondonConference

Conflict Free Replicated Data-types in Eventually Consistent Systems - Joel J...
Conflict Free Replicated Data-types in Eventually Consistent Systems - Joel J...Conflict Free Replicated Data-types in Eventually Consistent Systems - Joel J...
Conflict Free Replicated Data-types in Eventually Consistent Systems - Joel J...jaxLondonConference
 
JVM Support for Multitenant Applications - Steve Poole (IBM)
JVM Support for Multitenant Applications - Steve Poole (IBM)JVM Support for Multitenant Applications - Steve Poole (IBM)
JVM Support for Multitenant Applications - Steve Poole (IBM)jaxLondonConference
 
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)jaxLondonConference
 
What You Need to Know About Lambdas - Jamie Allen (Typesafe)
What You Need to Know About Lambdas - Jamie Allen (Typesafe)What You Need to Know About Lambdas - Jamie Allen (Typesafe)
What You Need to Know About Lambdas - Jamie Allen (Typesafe)jaxLondonConference
 
Java Testing With Spock - Ken Sipe (Trexin Consulting)
Java Testing With Spock - Ken Sipe (Trexin Consulting)Java Testing With Spock - Ken Sipe (Trexin Consulting)
Java Testing With Spock - Ken Sipe (Trexin Consulting)jaxLondonConference
 
Big Events, Mob Scale - Darach Ennis (Push Technology)
Big Events, Mob Scale - Darach Ennis (Push Technology)Big Events, Mob Scale - Darach Ennis (Push Technology)
Big Events, Mob Scale - Darach Ennis (Push Technology)jaxLondonConference
 
What makes Groovy Groovy - Guillaume Laforge (Pivotal)
What makes Groovy Groovy  - Guillaume Laforge (Pivotal)What makes Groovy Groovy  - Guillaume Laforge (Pivotal)
What makes Groovy Groovy - Guillaume Laforge (Pivotal)jaxLondonConference
 
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...jaxLondonConference
 
Exploring the Talend unified Big Data toolset for sentiment analysis - Ben Br...
Exploring the Talend unified Big Data toolset for sentiment analysis - Ben Br...Exploring the Talend unified Big Data toolset for sentiment analysis - Ben Br...
Exploring the Talend unified Big Data toolset for sentiment analysis - Ben Br...jaxLondonConference
 
The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)jaxLondonConference
 
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)jaxLondonConference
 
Put your Java apps to sleep? Find out how - John Matthew Holt (Waratek)
Put your Java apps to sleep? Find out how - John Matthew Holt (Waratek)Put your Java apps to sleep? Find out how - John Matthew Holt (Waratek)
Put your Java apps to sleep? Find out how - John Matthew Holt (Waratek)jaxLondonConference
 
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...jaxLondonConference
 
Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...
Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...
Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...jaxLondonConference
 
Little words of wisdom for the developer - Guillaume Laforge (Pivotal)
Little words of wisdom for the developer - Guillaume Laforge (Pivotal)Little words of wisdom for the developer - Guillaume Laforge (Pivotal)
Little words of wisdom for the developer - Guillaume Laforge (Pivotal)jaxLondonConference
 
Large scale, interactive ad-hoc queries over different datastores with Apache...
Large scale, interactive ad-hoc queries over different datastores with Apache...Large scale, interactive ad-hoc queries over different datastores with Apache...
Large scale, interactive ad-hoc queries over different datastores with Apache...jaxLondonConference
 
Designing Resilient Application Platforms with Apache Cassandra - Hayato Shim...
Designing Resilient Application Platforms with Apache Cassandra - Hayato Shim...Designing Resilient Application Platforms with Apache Cassandra - Hayato Shim...
Designing Resilient Application Platforms with Apache Cassandra - Hayato Shim...jaxLondonConference
 

Mehr von jaxLondonConference (18)

Conflict Free Replicated Data-types in Eventually Consistent Systems - Joel J...
Conflict Free Replicated Data-types in Eventually Consistent Systems - Joel J...Conflict Free Replicated Data-types in Eventually Consistent Systems - Joel J...
Conflict Free Replicated Data-types in Eventually Consistent Systems - Joel J...
 
JVM Support for Multitenant Applications - Steve Poole (IBM)
JVM Support for Multitenant Applications - Steve Poole (IBM)JVM Support for Multitenant Applications - Steve Poole (IBM)
JVM Support for Multitenant Applications - Steve Poole (IBM)
 
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
Packed Objects: Fast Talking Java Meets Native Code - Steve Poole (IBM)
 
What You Need to Know About Lambdas - Jamie Allen (Typesafe)
What You Need to Know About Lambdas - Jamie Allen (Typesafe)What You Need to Know About Lambdas - Jamie Allen (Typesafe)
What You Need to Know About Lambdas - Jamie Allen (Typesafe)
 
Java Testing With Spock - Ken Sipe (Trexin Consulting)
Java Testing With Spock - Ken Sipe (Trexin Consulting)Java Testing With Spock - Ken Sipe (Trexin Consulting)
Java Testing With Spock - Ken Sipe (Trexin Consulting)
 
Big Events, Mob Scale - Darach Ennis (Push Technology)
Big Events, Mob Scale - Darach Ennis (Push Technology)Big Events, Mob Scale - Darach Ennis (Push Technology)
Big Events, Mob Scale - Darach Ennis (Push Technology)
 
What makes Groovy Groovy - Guillaume Laforge (Pivotal)
What makes Groovy Groovy  - Guillaume Laforge (Pivotal)What makes Groovy Groovy  - Guillaume Laforge (Pivotal)
What makes Groovy Groovy - Guillaume Laforge (Pivotal)
 
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (R...
 
Exploring the Talend unified Big Data toolset for sentiment analysis - Ben Br...
Exploring the Talend unified Big Data toolset for sentiment analysis - Ben Br...Exploring the Talend unified Big Data toolset for sentiment analysis - Ben Br...
Exploring the Talend unified Big Data toolset for sentiment analysis - Ben Br...
 
The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)
 
TDD at scale - Mash Badar (UBS)
TDD at scale - Mash Badar (UBS)TDD at scale - Mash Badar (UBS)
TDD at scale - Mash Badar (UBS)
 
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
Run Your Java Code on Cloud Foundry - Andy Piper (Pivotal)
 
Put your Java apps to sleep? Find out how - John Matthew Holt (Waratek)
Put your Java apps to sleep? Find out how - John Matthew Holt (Waratek)Put your Java apps to sleep? Find out how - John Matthew Holt (Waratek)
Put your Java apps to sleep? Find out how - John Matthew Holt (Waratek)
 
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
Project Lambda: Functional Programming Constructs in Java - Simon Ritter (Ora...
 
Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...
Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...
Do You Like Coffee with Your dessert? Java and the Raspberry Pi - Simon Ritte...
 
Little words of wisdom for the developer - Guillaume Laforge (Pivotal)
Little words of wisdom for the developer - Guillaume Laforge (Pivotal)Little words of wisdom for the developer - Guillaume Laforge (Pivotal)
Little words of wisdom for the developer - Guillaume Laforge (Pivotal)
 
Large scale, interactive ad-hoc queries over different datastores with Apache...
Large scale, interactive ad-hoc queries over different datastores with Apache...Large scale, interactive ad-hoc queries over different datastores with Apache...
Large scale, interactive ad-hoc queries over different datastores with Apache...
 
Designing Resilient Application Platforms with Apache Cassandra - Hayato Shim...
Designing Resilient Application Platforms with Apache Cassandra - Hayato Shim...Designing Resilient Application Platforms with Apache Cassandra - Hayato Shim...
Designing Resilient Application Platforms with Apache Cassandra - Hayato Shim...
 

Kürzlich hochgeladen

Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 

Kürzlich hochgeladen (20)

Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 

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

  • 1. The JVM is dead! Long live the Polyglot VM! Marcus Lagergren Oracle
  • 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. Who am I? @lagergren 3 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. Introduction 5 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 6. I am here to talk about… The Java Runtime: The JVM 6 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 7. I am here to talk about… The Universal MetaExecution Environment 7 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 8. I am here to talk about… The Universal MetaExecution Environment 8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. 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. History (what is a runtime anyway?) 11 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 12. LISP 12 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 13. LISP 1950s – First compiler in 1962 13 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 14. LISP 1950s – First compiler in 1962 Just-in-time compilation 14 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 15. LISP 1950s – First compiler in 1962 Just-in-time compilation 15 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. 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. Smalltalk 18 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 19. Smalltalk First class library 19 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 20. Smalltalk First class library First visual GUI driven IDE 20 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 21. Smalltalk First class library First visual GUI driven IDE BYTECODE! 21 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 22. Smalltalk First class library First visual GUI driven IDE BYTECODE! 22 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 23. Emerging languages (especially on the JVM) 23 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. 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. 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. Trendy Dynamic Languages 27 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 28. Trendy Dynamic Languages 28 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 29. Trendy Dynamic Languages 29 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 30. Trendy Dynamic Languages 30 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 31. Trendy Dynamic Languages Already on top of the JVM 31 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 32. Trendy Dynamic Languages Already on top of the JVM 32 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 35. 35 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 36. 36 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 37. 37 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 38. Dynamic Languages – Implementation 38 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 39. Dynamic Languages – Implementation •  39 Native Runtimes •  Ruby, Perl, Python, v8, *monkey etc Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. 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. 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. 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. 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. 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. 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. Dynamic Languages – Characteristics •  •  •  47 Code equals data eval / REPL Automatic memory management Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. Putting your language on top of the JVM 49 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. Why? Code bases 500000 400000 300000 200000 100000 0 51 Copyright © 2013, Oracle and/or its affiliates. All rights reserved. Lines
  • 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. “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. “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. 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. “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. “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. So why is it hard? 58 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Also: it is hard to swap out code with other code 68 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 69. Also: it is hard to swap out code with other code 69 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. 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. 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. Punch through the indirection layer invokedynamic is my ice pick! 73 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. The whole point: The JVM can optimize this! 75 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 76. invokedynamic bytecode 76 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 77. invokedynamic bytecode Calls (once) Bootstrap Method 77 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Java 8 also uses invokedynamic (Delegators with lambda) 93 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 94. The Nashorn Project 94 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. 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 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 98. 98 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. Rationale 100 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 101. Full ECMAScript compliance 101 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. The Da Vinci Machine Project 116 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 117. Can we do better than the ice pick? 117 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 118. Can we do better than the ice pick? •  118 Reshape the hole! Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. Da Vinci Machine Patches 120 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 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. Thank you! Q&A? @lagergren 122 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.