Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM...

111

Transcript of Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM...

Page 1: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.1

Page 2: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Java SE: A Youthful MaturityDanny CowardPrincipal Engineer and Java Evangelist

Page 3: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.3

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.

Page 4: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.3

Page 5: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.4

The secrets of longevity ?

Page 6: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.4

The secrets of longevity ?

Page 7: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.5

What are the secrets for the longevity of the Java Platform?

Page 8: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.5

What are the secrets for the longevity of the Java Platform?

Page 9: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.5

Parallel programming

.NET competitivenessWeb Services

Multiple JVM languagesPerformance

Scaling from low to high

API breadth

Realtime characteristicsEase of learning

Productivity

What are the secrets for the longevity of the Java Platform?

Page 10: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.5

Parallel programming.NET competitiveness

Web ServicesMultiple JVM languages

Performance

Scaling from low to high

API breadth

Realtime characteristicsEase of learning

Productivity

What are the secrets for the longevity of the Java Platform?

Page 11: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

1.01.1

1.21.31.4

5.0

61996 1997 1998 2000 2002 2004 2006 2010 2011 2012

786

2015

......

Multiple JVM languagesParallel programming

Page 12: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

7

Java VM Specification, 1997

Page 13: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

7

Java VM Specification, 1997

• The Java Virtual Machine knows nothing about the Java programming language, only of a particular binary format, the class file format.

• A class file contains Java Virtual Machine instructions (or bytecodes) and a symbol table, as well as other ancillary information.

• Any language with functionality that can be expressed in terms of a valid class file can be hosted by the Java virtual machine.

• Attracted by a generally available, machine-independent platform, implementors of other languages are turning to the Java Virtual Machine as a delivery vehicle for their languages.

• In the future, we will consider bounded extensions to the Java Virtual Machine to provide better support for other languages.

Page 14: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Trends in programming languages

8

Page 15: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.9

Page 16: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Clojure

Tcl

v-language

Funnel

Mini

Lisp

LogoJHCR

Drools

Prolog

LLP

JESS Eiffel

Smalltalk

G Groovy

Correlate

Bex Script

Sleep

JudoScript

SimkinWebL

Processing

Tiger

Icon

Modula-2

E

Rexx

JavaFX Script

Present

Scheme

Basic

TermWare

Hojo

Tea

PHP

FScript

Jickle

Piccola

Pascal

Luck

Scala Sather

PLAN

foo

Ada

ObjectScript

iScript

SALSAOberon

Phobos

JRuby

Dawn

JythonYassl

Forth

Zigzag

Nice

Yoix

C#

Anvil

JavaScript

BeanShell

CAL

Pnuts

9

Page 17: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.10

ScriptEngineManager m = new ScriptEngineManager(); ScriptEngine jsEngine = m.getEngineByName("js");

import javax.script.*

Scripting on Java SE 6 Platform

Page 18: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.10

ScriptEngineManager m = new ScriptEngineManager(); ScriptEngine jsEngine = m.getEngineByName("js");

jsEngine.eval("print('Hello, world!')");

import javax.script.*

Scripting on Java SE 6 Platform

Page 19: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.10

ScriptEngineManager m = new ScriptEngineManager(); ScriptEngine jsEngine = m.getEngineByName("js");

InputStream is = this.getClass().getResourceAsStream("/scripts/hello.js"); Reader reader = new InputStreamReader(is); jsEngine.eval(reader);

import javax.script.*

Scripting on Java SE 6 Platform

Page 20: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.10

ScriptEngineManager m = new ScriptEngineManager(); ScriptEngine jsEngine = m.getEngineByName("js");

jsEngine.eval("function sayHello() {" + " println('Hello, world!');" + "}");

Invocable invocableEngine = (Invocable) jsEngine; invocableEngine.invokeFunction("sayHello");

import javax.script.*

Scripting on Java SE 6 Platform

Page 21: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Languages ♥ Virtual Machines

• Programming languages need runtime support– Memory management / Garbage collection– Concurrency control– Security– Reflection– Debugging / Profiling– Standard libraries (collections, database, XML, etc)

• Traditionally, language implementers coded these themselves• Many implementers now choose to target a VM to reuse

infrastructure

11

Page 22: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

“Java is fast because it runs on a VM”

• Major breakthrough was the advent of “Just In Time” compilers [fast]– Compile from bytecode to machine code at runtime– Optimize using information available at runtime only

• Simplifies static compilers– javac and ecj generate “dumb” bytecode and

trust the JVM to optimize– Optimization is real, but invisible

12

Page 23: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.13

Optimizations apply (more or less) to all languages

• Optimizations work on bytecode in .class files• A compiler for any language – not just Java – can emit a .class file• All languages can benefit from dynamic compilation and optimizations like inlining

Page 24: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

HotSpot optimizations

14

Page 25: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

compiler tactics delayed compilation Tiered compilation

on-stack replacement delayed reoptimization

program dependence graph representation

static single assignment representation

proof-based techniques exact type inference

memory value inference memory value tracking

constant folding reassociation

operator strength reduction null check elimination

type test strength reduction type test elimination

algebraic simplification common subexpression elimination

integer range typingflow-sensitive rewrites

conditional constant propagation dominating test detection

flow-carried type narrowing dead code elimination

HotSpot optimizations

14

Page 26: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

compiler tactics delayed compilation Tiered compilation

on-stack replacement delayed reoptimization

program dependence graph representation

static single assignment representation

proof-based techniques exact type inference

memory value inference memory value tracking

constant folding reassociation

operator strength reduction null check elimination

type test strength reduction type test elimination

algebraic simplification common subexpression elimination

integer range typingflow-sensitive rewrites

conditional constant propagation dominating test detection

flow-carried type narrowing dead code elimination

language-specific techniques class hierarchy analysis

devirtualization symbolic constant propagation

autobox elimination escape analysis

lock elision lock fusion

de-reflection speculative (profile-based) techniques

optimistic nullness assertions optimistic type assertions

optimistic type strengthening optimistic array length strengthening

untaken branch pruning optimistic N-morphic inlining branch frequency prediction

call frequency predictionmemory and placement transformation

expression hoisting expression sinking

redundant store elimination adjacent store fusion card-mark elimination merge-point splitting

HotSpot optimizations

14

Page 27: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

compiler tactics delayed compilation Tiered compilation

on-stack replacement delayed reoptimization

program dependence graph representation

static single assignment representation

proof-based techniques exact type inference

memory value inference memory value tracking

constant folding reassociation

operator strength reduction null check elimination

type test strength reduction type test elimination

algebraic simplification common subexpression elimination

integer range typingflow-sensitive rewrites

conditional constant propagation dominating test detection

flow-carried type narrowing dead code elimination

language-specific techniques class hierarchy analysis

devirtualization symbolic constant propagation

autobox elimination escape analysis

lock elision lock fusion

de-reflection speculative (profile-based) techniques

optimistic nullness assertions optimistic type assertions

optimistic type strengthening optimistic array length strengthening

untaken branch pruning optimistic N-morphic inlining branch frequency prediction

call frequency predictionmemory and placement transformation

expression hoisting expression sinking

redundant store elimination adjacent store fusion card-mark elimination merge-point splitting

loop transformations loop unrolling loop peeling

safepoint elimination iteration range splitting range check elimination

loop vectorizationglobal code shaping

inlining (graph integration) global code motion

heat-based code layout switch balancing

throw inliningcontrol flow graph transformation

local code scheduling local code bundling

delay slot filling graph-coloring register allocation

linear scan register allocation live range splitting copy coalescing constant splitting

copy removal address mode matching instruction peepholing

DFA-based code generator

HotSpot optimizations

14

Page 28: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Inlining: Example

15

Page 29: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> { public T getFoo();}

Inlining: Example

15

Page 30: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> { public T getFoo();}

public class MyHolder<T> implements FooHolder<T> { private final T foo;

public MyHolder(T foo32) { this.foo = foo; }

public T getFoo() { return foo; }}

Inlining: Example

15

Page 31: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

Inlining: Example

16

Page 32: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

Inlining: Example

16

Page 33: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

...public String foo(String x) { FooHolder<String> myFooHolder = new MyHolder<String>(x); return getString(myFooHolder);}

Inlining: Example

16

Page 34: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

Step 1 Inline getString() call

...public String foo(String x) { FooHolder<String> myFooHolder = new MyHolder<String>(x); return getString(myFooHolder);}

Inlining: Example

16

Page 35: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

...public String foo(String x) { FooHolder<String> myFooHolder = new MyHolder<String>(x); if (myFooHolder == null) throw new NullPointerException("You dummy."); else return myFooHolder.getFoo();}

Inlining: Example

17

Page 36: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

...public String foo(String x) { FooHolder<String> myFooHolder = new MyHolder<String>(x); if (myFooHolder == null) throw new NullPointerException("You dummy."); else return myFooHolder.getFoo();}

Step 2 Dead code elimination

Inlining: Example

17

Page 37: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

...public String foo(String x) { FooHolder<String> myFooHolder = new MyHolder<String>(x); return myFooHolder.getFoo();}

Inlining: Example

18

Page 38: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

...public String foo(String x) { FooHolder<String> myFooHolder = new MyHolder<String>(x); return myFooHolder.getFoo();}

Step 3 Type sharp and inline

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; } }

Inlining: Example

18

Page 39: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

...public String foo(String x) { FooHolder<String> myFooHolder = new MyHolder<String>(x); return myFooHolder.foo;}

Inlining: Example

19

Page 40: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

...public String foo(String x) { FooHolder<String> myFooHolder = new MyHolder<String>(x); return myFooHolder.foo;}

Step 4 Escape analysis and scalar replacement

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

19

Page 41: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

...public String foo(String x) { return x;}

Inlining: Example

20

Page 42: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public interface FooHolder<T> {

public T getFoo();

}

public class MyHolder<T>

implements FooHolder<T> {

private final T foo;

public MyHolder(T foo) { this.foo = foo; }

public T getFoo() { return foo; }

}

Inlining: Example

public String getString(FooHolder<String> holder) { if (holder == null) throw new NullPointerException("You dummy."); else return holder.getFoo();}

...public String foo(String x) { return x;}

public String foo(String x) { FooHolder<String> myFooHolder = new MyHolder<String>(x); return getString(myFooHolder);} ✘

Inlining: Example

20

Page 43: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Different kinds of languages

21

Page 44: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.22

Page 45: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.22

If we could make one change to the JVM to improve life for dynamic languages, what would it be?

Page 46: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.22

If we could make one change to the JVM to improve life for dynamic languages, what would it be?

More flexible method calls

Page 47: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

More flexible method calls

• The invokevirtual bytecode performs a method call• Its behavior is Java-like and fixed• Other languages need custom behavior• Idea: let some “language logic” determine the behavior

of a JVM method call• Invention: the invokedynamic bytecode

– VM asks some “language logic” how to call a method– Language logic gives an answer, and decides if it needs to stay

in the loop

23

Page 48: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.24

What’s next? Da Vinci projects

• The Da Vinci Machine Project continues• Community contributions:

– Continuations– Coroutines– Hotswap– Tailcalls– Interface injection

• Gleams in our eyes:– Object “species” (for splitting classes more finely)– Tuples and value types (for using registers more efficiently)– Advanced array types (for using memory more efficiently)

Page 49: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

1.4 5.0 62002 2004 2006 2011 2012

7825

2015......

Multiple JVM languages

invokedynamicDaVinci.next

Scripting for the Java Platform

Nextkiller

language ?

Page 50: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Raise the speed limit ?

26

Traffic Jams

Page 51: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Raise the speed limit ?Raise the speed limit ?

Build more lanes !

26

Traffic Jams

Page 52: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Raise the speed limit ?Raise the speed limit ?

Build more lanes !

26

The rise of multi-core/multi-processor architectures

Traffic Jams

Page 53: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.27

Multi-core, Multi Processor Servers

Page 54: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Niagara 1 (2005)

8 x 4 = 32

27

Multi-core, Multi Processor Servers

Page 55: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Niagara 1 (2005)

8 x 4 = 32

Niagara 2 (2007)

8 x 8 = 64

27

Multi-core, Multi Processor Servers

Page 56: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Niagara 1 (2005)

8 x 4 = 32

Niagara 2 (2007)

8 x 8 = 64

Rainbow Falls (Now)16 x 8 = 128

27

Multi-core, Multi Processor Servers

Page 57: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.28

2002 2004 2006 2008 2010

2 ... 4 ..... 8 .....

Desktop ... notepad ... phoneMulticore clients

Page 58: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Parallel Programming

29

• The runtime only has a partial view of how to optimize your application

Page 59: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Parallel Programming

29

• The runtime only has a partial view of how to optimize your application

• It needs your help so it knows how to parallelize your application

Page 60: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Concurrency APIs for developers: JDK 1.5

30

• Originally developed for JDK 1.5• Result of work of JSR 166• API level toolkit for concurrent programming

- Locks- Threadpools- Blocking queues

• Found in java.util.concurrent.*

Page 61: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Concept of Fork/Join Framework

31Image: Gareth Jones

Page 62: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Concept of Fork/Join Framework

Large, compute-intensive

task

31Image: Gareth Jones

Page 63: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Concept of Fork/Join Framework

Large, compute-intensive

task

Fork intosubtasks

31Image: Gareth Jones

Page 64: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Concept of Fork/Join Framework

Large, compute-intensive

task

Fork intosubtasks

Process tasksin parallel

31Image: Gareth Jones

Page 65: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Concept of Fork/Join Framework

Large, compute-intensive

task

Fork intosubtasks

Process tasksin parallel

Join subtasks as they complete

31Image: Gareth Jones

Page 66: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Concept of Fork/Join Framework

Large, compute-intensive

task

Fork intosubtasks

Process tasksin parallel

Join subtasks as they complete

Completedtask

31Image: Gareth Jones

Page 67: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Basic Idea

if (my portion of the work is small enough) { do the work directly} else { split my work into two pieces invoke the two pieces and wait for the results}

32

Page 68: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Fork Join Framework API

• java.util.concurrent.ForkJoinPool• Special class for managing tasks that will execute in parallel• Submit new tasks• Manage lifecycle of tasks• Monitor task execution

• java.util.concurrent.ForkJoinTask• Abstract base class encapsulating task to run concurrently• Like a lightweight thread• Typically use RecursiveTask or RecursiveAction

33

Page 69: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Example: Blurring an image

public class ForkBlur { private int[] mSource; private int mStart; private int mLength; private int[] mDestination; private int mBlurWidth = 15; // Processing window size, should be odd. public ForkBlur(int[] src, int start, int length, int[] dst) { mSource = src; mStart = start; mLength = length; mDestination = dst; }

...

34

Page 70: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

public class ForkBlur {

... // this is the heavy lifting protected void computeDirectly() { int sidePixels = (mBlurWidth - 1) / 2; for (int index = mStart; index < mStart + mLength; index++) { // Calculate average. float rt = 0, gt = 0, bt = 0; for (int mi = -sidePixels; mi <= sidePixels; mi++) { int mindex = Math.min(Math.max(mi + index, 0), mSource.length - 1); int pixel = mSource[mindex]; rt += (float)((pixel & 0x00ff0000) >> 16) / mBlurWidth; gt += (float)((pixel & 0x0000ff00) >> 8) / mBlurWidth; bt += (float)((pixel & 0x000000ff) >> 0) / mBlurWidth; } // Re-assemble destination pixel. int dpixel = (0xff000000 ) | (((int)rt) << 16) | (((int)gt) << 8) | (((int)bt) << 0); mDestination[index] = dpixel; }

...

}35

Example: Blurring an image

Page 71: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Heavy lifting in parallel using Fork/Join

public class ForkBlur extends RecursiveAction {

protected void compute() { // use the Fork/Join pattern here

} ...

protected void computeDirectly() { // this is still the heavy lifting }

...

}

36

Page 72: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Basic concept of Fork/Join

if (my portion of the work is small enough) { do the work directly} else { split my work into two pieces invoke the two pieces and wait for the results}

37

Page 73: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Application of Fork/Join

protected static int sThreshold = 100000;

protected void compute() {

// is my portion of the work is small enough ? if (mLength < sThreshold) {

// just do it computeDirectly(); return; } else {

// split my work into two pieces int split = mLength / 2; invokeAll( new ForkBlur(mSource, mStart, split, mDestination),

new ForkBlur(mSource, mStart + split, mLength - split, mDestination) );

}}

38

Page 74: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Running the code

// source image pixels are in src// destination image pixels are in dstForkBlur fb = new ForkBlur(src, 0, src.length, dst);

ForkJoinPool pool = new ForkJoinPool();

// now the work can be executed in parallelpool.invoke(fb);

39

Page 75: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Parallel Programming in Java today

40

Ease Supported by

Possible but very tricky Thread API

Well-supported for specialized purposes Concurrency APIs with Fork/Join

Commonplace Not yet...

Page 76: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.41

Page 77: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

class Student { String name; int gradYear; double score;}

41

Page 78: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

class Student { String name; int gradYear; double score;}

Collection<Student> students = ...;

41

Page 79: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Collection<Student> students = ...;

42

Page 80: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Collection<Student> students = ...;

double max = Double.MIN_VALUE;for (Student s : students) { if (s.gradYear == 2010) max = Math.max(max, s.score);}

42

Page 81: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Collection<Student> students = ...;

double max = students.filter(new Predicate<Student>() { public boolean op(Student s) { return s.gradYear == 2010;

} }).map(new Extractor<Student,Double>() { public Double extract(Student s) {

return s.score; }

}).max();

42

Page 82: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Collection<Student> students = ...;

ddouble max = students.filter(new Predicate<Student>() { public boolean op(Student s) { return s.gradYear == 2010;

} }).map(new Extractor<Student,Double>() { public Double extract(Student s) {

return s.score; }

}).max();

// Lambda expressions

s -> s.score }) Student Student

double max = students.filter( #{

.map(#{ .max();

s -> s.gradYear == 2010 })

42

Page 83: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Inner classes are imperfect closures

• Bulky syntax• Can’t capture non-final local variables• Transparency issues: meaning of return, break, continue, this• No non-local control flow operators

43

Page 84: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Single Abstract Method (SAM) Types

public interface CallbackHandler {

// single abstract method public void callback(Context c);

}

• Lots of examples in the Java SE APIs– Runnable, Callable, EventHandler, Comparator...

44

Page 85: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Single Abstract Method (SAM) Types

foo.doSomething(new CallbackHandler() { public void callback(Context c) {

System.out.println("callback"); } });

• Noise:Work = 5:1• Lambda grows out of the idea of making callback objects easier

45

Page 86: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Single Abstract Method (SAM) Types

A Lambda expression with one parameter, one statement statement list block, void return type, no checked exceptions

46

foo.doSomething(new CallbackHandler() { public void callback(Context c) {

System.out.println("callback"); } });

// with Lambdafoo.doSomething(

#{ Context c -> System.out.println("pippo") }; );

Page 87: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

More examples

#{ Context c -> System.out.println("pippo") };

#{ -> 42 }

#{ int x -> x + 1 }

47

Page 88: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Target Typing

CallBackHandler cb = #{ Context c -> System.out.println("pippo") };

Runnable r = #{ System.out.println("Running") };Runnable r = (Runnable) #{ System.out.println("Running") };executor.submit( #{ System.out.println("Running") } );

Rule #1: Only in a context where it can be converted to a SAM type

48

Page 89: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Lambda Bodies

Rule #2: A list of statements just like in a method body, except no break or continue at the top level. The return type is inferred from the unification of the returns from the set of return statements

Rule #3: ‘this’ has the same value as ‘this’ immediately outside the Lambda expression

Rule #4: Lambdas can use ‘effectively final’ variables as well as final variables.

49

Page 90: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.Copyright © 2010 Oracle and/or its affiliates. All rights reserved.

Collection<Student> students = ...;

50

Page 91: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.Copyright © 2010 Oracle and/or its affiliates. All rights reserved.

Collection<Student> students = ...;

50

// Lambda expressions

s -> s.score }) Student Student

double max = students.filter( #{

.map(#{ .max();

s -> s.gradYear == 2010 })

Page 92: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Extending Interfaces

public interface Set<T> extends Collection<T> {

public int size();

...

// The rest of the existing Set methods public extension T reduce(Reducer<T> r) default Collections.<T>setReducer;}

51

Page 93: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Extending Interfaces

public interface Set<T> extends Collection<T> {

public int size();

...

// The rest of the existing Set methods public extension T reduce(Reducer<T> r) default Collections.<T>setReducer;}

tells us this method extends

the interface

51

Page 94: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Extending Interfaces

public interface Set<T> extends Collection<T> {

public int size();

...

// The rest of the existing Set methods public extension T reduce(Reducer<T> r) default Collections.<T>setReducer;}

tells us this method extends

the interface

Implementation to use if none exists for the implementing class

51

Page 95: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Collection<Student> students = ...;

// Lambda expressions

s -> s.score })

double max = students.filter( #{ .map( #{ .max();

s -> s.gradYear == 2010 })

52

Page 96: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Collection<Student> students = ...;

// Lambda expressions

s -> s.score })

double max = students.filter( #{ .map( #{ .max();

s -> s.gradYear == 2010 })

interface Collection<T> { int add(T t); int size(); void clear(); ...}

52

Page 97: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Collection<Student> students = ...;

// Lambda expressions

s -> s.score })

double max = students.filter( #{ .map( #{ .max();

s -> s.gradYear == 2010 })

53

Page 98: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

Collection<Student> students = ...;

// Default methods

extension Collection<E> filter(Predicate<T> p) default Collections.<T>filter;

extension <V> Collection<V> map(Extractor<T,V> e) default Collections.<T>map;

extension <V> V max() default Collections.<V>max;

interface Collection<T> {

}

// Lambda expressions

s -> s.score })

double max = students.filter( #{ .map( #{ .max();

s -> s.gradYear == 2010 })

53

Page 99: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.54

Language futures: Collection Literalsfinal List<Integer> piDigits = Collections.unmodifiableList( Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9 ));

Page 100: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.54

Language futures: Collection Literalsfinal List<Integer> piDigits = Collections.unmodifiableList( Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9 ));

final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];

Page 101: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.54

Language futures: Collection Literalsfinal List<Integer> piDigits = Collections.unmodifiableList( Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9 ));

final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];

final Set<Integer> primes = { 2, 7, 31, 127, 8191, 131071, 524287 };

Page 102: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.54

Language futures: Collection Literalsfinal List<Integer> piDigits = Collections.unmodifiableList( Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9 ));

final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];

final Set<Integer> primes = { 2, 7, 31, 127, 8191, 131071, 524287 };

Set<Senator> honestPoliticians = {};

Page 103: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.55

Language futures: Collection Literalsfinal Map<Integer, String> platonicSolids; static { Map<Integer, String> solids = new LinkedHashMap<Integer, String>(); solids.put(4, "tetrahedron"); solids.put(6, "cube"); solids.put(8, "octahedron"); solids.put(12, "dodecahedron"); solids.put(20, "icosahedron"); platonicSolids = Collections.immutableMap(solids); }

Page 104: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

}

55

Language futures: Collection Literalsfinal Map<Integer, String> platonicSolids; static { Map<Integer, String> solids = new LinkedHashMap<Integer, String>(); solids.put(4, "tetrahedron"); solids.put(6, "cube"); solids.put(8, "octahedron"); solids.put(12, "dodecahedron"); solids.put(20, "icosahedron"); platonicSolids = Collections.immutableMap(solids); }

Page 105: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

}

55

Language futures: Collection Literalsfinal Map<Integer, String> platonicSolids; static { Map<Integer, String> solids = new LinkedHashMap<Integer, String>(); solids.put(4, "tetrahedron"); solids.put(6, "cube"); solids.put(8, "octahedron"); solids.put(12, "dodecahedron"); solids.put(20, "icosahedron"); platonicSolids = Collections.immutableMap(solids); }

final Map<Integer, String> platonicSolids = { 4 : "tetrahedron", 6 : "cube", 8 : "octahedron", 12 : "dodecahedron", 20 : "icosahedron"};

Page 106: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

1.4 5.0 62002 2004 2006 2011 2012

7 856

2015...

Fork/Join Framework

LambdasConcurrent collections

Parallel Programming

java.lang.Thread

java.util.concurrent Automaticparellization

?

Page 107: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

1.01.1

1.21.31.4

5.0

61996 1997 1998 2000 2002 2004 2006 2010 2011 2012

7857

2015

......

Multiple JVM languagesParallel programming

Page 108: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.58

Page 109: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

7InvokeDynamic (JSR 292)

Fork/Join Framework

Project Coin (JSR 334)

Strict Verification

Parallel Class Loaders

Transfer QueuesPhasers

Unicode 6.0Swing Nimbus

XRender Pipeline

ECCSwing JLayerMore New I/O (JSR 203)

JDBC 4.1

TLS 1.2

Enhanced LocalesSDP & SCTP

Mid 2011

58

Page 110: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

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

7Project Jigsaw

InvokeDynamic (JSR 292)

Fork/Join Framework

Project Coin (JSR 334)

Strict Verification

Parallel Class Loaders

Type Annotations (JSR 308)Transfer QueuesPhasers Bulk-Data Operations

Unicode 6.0Swing Nimbus

XRender Pipeline

ECCSwing JLayerMore New I/O (JSR 203)

JDBC 4.1

TLS 1.2

Swing JDatePicker

Enhanced LocalesSDP & SCTP

Project Lambda (JSR 335)

8Late 2012Mid 2011

Collection Literals

58

Page 111: Copyright © 2011 Oracle and/or its affiliates. All rights reserved. 1 · 2014-09-16 · 7 Java VM Specification, 1997 • The Java Virtual Machine knows nothing about the Java programming

Copyright © 2011 Oracle and/or its affiliates. All rights reserved.59