Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Java
7
Launch

Fork/Join
concurrency




                        @Sander_Mak
What?

Fork:
Recursively
decompose
large
task
into
subtasks


Join:
Combine
results
of
recursive
tasks



      7/7/2011             Java
7
Launch
Event
Why?
              Mul3core
challenge




   7/7/2011                        Java
7
Launch
Event
How?

Introducing:


java.uLl.concurrent.ForkJoinPool                         Worker 1




• ‘ExecutorService
with
                                   Worker 2

  runLme
tuning’
• Recursive
algorithms
                                                           Worker 3
• Workstealing


         7/7/2011                    Java
7
Launch
Event
...
MapReduce?



Environment         Single
JVM          Cluster

Model               Recursive
forking   Single
fork
step

Scales
with         Cores/CPUs          Nodes

Opera3on            Workstealing        No
inter‐node

                                        communicaLon


         7/7/2011                        Java
7
Launch
Event
Example
Sony’s
been
hacked...




                Are
we
compromised...?



     7/7/2011                   Java
7
Launch
Event
Java
7
Launch

JSR‐292:
Invokedynamic




                         @Sander_Mak
JVM
Languages




                Java


    7/7/2011           Java
7
Launch
Event
JVM
Languages



               Groovy      Clojure

      JRuby        Java         JavaFX
                        Scala



    7/7/2011                     Java
7
Launch
Event
JVM
Languages
jProlog                     Pizza                                 MultiJava
                                            Fantom


 JLog
                       Groovy            Clojure                        MetaJ



            JRuby               Java             JavaFX                   Jaskell


                       Rhino        Scala                JBasic
Aardappel
                                        Funnel
                     Jacl                                               Drools
                               Jython

          7/7/2011                                Java
7
Launch
Event
JVM
Languages




  Hundreds of
  Languages
    7/7/2011    Java
7
Launch
Event
JVM
Languages

‘Language
ficLons’

       JVM


  Exceptions
  Primitive types
  Objects
  Access control
  Garbage coll.
  Threading
  Memory model



        7/7/2011    Java
7
Launch
Event
JVM
Languages

‘Language
ficLons’
                         Java

                    Enums
                    Checked exc.
       JVM          Generics


  Exceptions        Exceptions
  Primitive types   Primitive types
  Objects           Objects
  Access control    Access control
  Garbage coll.     Garbage coll.
  Threading         Threading.
  Memory model      Memory model



        7/7/2011                      Java
7
Launch
Event
JVM
Languages
                                            JRuby

‘Language
ficLons’                     Open classes
                                      Dynamic typing
                         Java         Closures

                    Enums             Enums
                    Checked exc.      Checked exc.
       JVM          Generics          Generics


  Exceptions        Exceptions        Exceptions
  Primitive types   Primitive types   Primitive types
  Objects           Objects           Objects
  Access control    Access control    Access control
  Garbage coll.     Garbage coll.     Garbage coll.
  Threading         Threading.        Threading
  Memory model      Memory model      Memory model



        7/7/2011                       Java
7
Launch
Event
JVM
Languages
                                            JRuby

‘Language
ficLons’                     Open classes
                                      Dynamic typing
                         Java         Closures

                    Enums             Enums
                    Checked exc.      Checked exc.
       JVM          Generics          Generics


  Exceptions        Exceptions        Exceptions
  Primitive types   Primitive types   Primitive types
  Objects           Objects           Objects
  Access control    Access control    Access control
  Garbage coll.     Garbage coll.     Garbage coll.
  Threading         Threading.        Threading
  Memory model      Memory model      Memory model



        7/7/2011                       Java
7
Launch
Event
JVM
Languages
 Obviously
JVM
is
viable,
however:
• Language
implementors
need
to
invent

  ‘creaLve’
compilaLon
schemes
for
every

  language
• Performance
suffers
when
abstracLng
beyond

  Java
idioms



                How
to
improve?

     7/7/2011                     Java
7
Launch
Event
JSR‐292
         Mission:
 “We are extending the JVM with first-class architectural
 support for languages other than Java, especially dynamic
 languages. This project will prototype a number of
 extensions to the JVM, so that it can run non-Java languages
 efficiently, with a performance level comparable to that of
 Java itself.”    http://openjdk.java.net/projects/mlvm/




      7/7/2011                             Java
7
Launch
Event
Compiling
dynamic
languages

  • JVM
pre]y
language‐friendly
  • ExcepLon:
method
calls
       – Signature
at
callsite
must
match
exactly
                                    TargetClass        Name       Method descriptor
18:
 invokevirtual
    #5; //Method java/util/ArrayList.add:(Ljava/lang/Object;)Z



       – Dispatch
on
staLc
type
of
parameters
and
dynamic

         type
of
receiver
       – Method
must
exist
at
compile
Lme
       – Link
to
target
is
fixed,
no
relinking

            7/7/2011                                      Java
7
Launch
Event
Compiling
dynamic
languages

• Common
soluLons:
     - Don’t
compile,
interpret
(someLmes
unavoidable)
     - Introduce
generic
CallSite
abstracLon
which
dispatches

       method
calls
     - AOT
compilaLon
into
specialized
invoker
classes

       (suitable
for
core
methods)
     - JIT
bytecode
generaLon
of
small
stub
methods


 Either
way:
abundance
of
syntheLc
types
and

 bytecode
hard
to
opLmize
for
JVM

     7/7/2011                              Java
7
Launch
Event
Invokedynamic
      New
bytecode,
last
piece
of
JSR‐292
puzzle:
                                        Name    Method descriptor
18:
 invokedynamic
   #5; //NameAndType addInts:(II)I




 • InvocaLon
without
reference
to
actual
method

   descriptor
 • Instead,
symbolic
name
and
type
 • No
receiver:
all
arguments
are
equal
                      What
is
the
target?
           7/7/2011                                     Java
7
Launch
Event
Method
handles
• Lightweight,
safe
method
pointers
• Like
java.lang.reflect.Method,
but:
  – No
argument
boxing/unboxing
  – Access
checks
only
at
creaLon
Lme
  – Leaner,
can
be
as
fast
as
direct
call
  – No
wrapping
of
excepLons




      7/7/2011                              Java
7
Launch
Event
Method
handles
• Lightweight,
safe
method
pointers
• Like
java.lang.reflect.Method,
but:
  – No
argument
boxing/unboxing
  – Access
checks
only
at
creaLon
Lme
  – Leaner,
can
be
as
fast
as
direct
call
  – No
wrapping
of
excepLons

                                                                  Java
7
 MethodHandle mh =
    MethodHandles.lookup().findVirtual(String.class,
 “substring”, typeDescriptor);

 String java = (String) mh.invokeExact(“jjava”, 1);

      7/7/2011                              Java
7
Launch
Event
Invokedynamic
‐
bootstrap
• Invokedynamic
triggers
bootstrap
• Ader
installing
target,
invokedynamic
invokes

  MH
directly
 DynamicInvokerClass                  ImplementationClass

aload_1;
invokedyn. meth:Type;             implementation(Type) {
return;                              result = ..
                                     return result

                                  }
bootstrap( .. ) {
   ..lookup..
   return CallSite

}




       7/7/2011                    Java
7
Launch
Event
Invokedynamic
‐
bootstrap
• Invokedynamic
triggers
bootstrap
• Ader
installing
target,
invokedynamic
invokes

  MH
directly
 DynamicInvokerClass                  ImplementationClass

aload_1;
invokedyn. meth:Type;             implementation(Type) {
return;                              result = ..
                                     return result

                                  }
bootstrap( .. ) {
   ..lookup..
   return CallSite

}




       7/7/2011                    Java
7
Launch
Event
Invokedynamic
‐
bootstrap
• Invokedynamic
triggers
bootstrap
• Ader
installing
target,
invokedynamic
invokes

  MH
directly
 DynamicInvokerClass                  ImplementationClass

aload_1;
invokedyn. meth:Type;             implementation(Type) {
return;                              result = ..
                                     return result

                                  }
bootstrap( .. ) {
   ..lookup..
   return CallSite

}




       7/7/2011                    Java
7
Launch
Event
Invokedynamic
‐
bootstrap
• Invokedynamic
triggers
bootstrap
• Ader
installing
target,
invokedynamic
invokes

  MH
directly
 DynamicInvokerClass                                   ImplementationClass

aload_1;
invokedyn. meth:Type;                              implementation(Type) {
return;                                               result = ..
                                                      return result

                                                   }
bootstrap( .. ) {
   ..lookup..           MH
can
be
guarded

   return CallSite
                        with
test,
adapt
types,

}                       etc.



       7/7/2011                                    Java
7
Launch
Event
Invokedynamic
‐
bootstrap
• Invokedynamic
triggers
bootstrap
• Ader
installing
target,
invokedynamic
invokes

  MH
directly
 DynamicInvokerClass                    ImplementationClass

aload_1;
invokedyn. meth:Type;   Method      implementation(Type) {
return;                 Handle(s)      result = ..
                                       return result

                                    }
bootstrap( .. ) {
   ..lookup..
   return CallSite

}




       7/7/2011                     Java
7
Launch
Event
Invokedynamic

• Invokedynamic
+
bootstrap
method
allow

  language
to
up‐call
from
VM
for
linking/
  dispatching.

Not
impossible
before,
but
hard
and
slow.
JVM
now

          fully
opLmizes
dynamic
calls.




     7/7/2011                    Java
7
Launch
Event
Wrap‐up
• JSR‐292
invokedynamic
features:
  – Let’s
language
implementors
avoid
tricks
  – Level
the
playing
ground,
speedwise
  – Allow
exisLng
VM
opLmizaLons
to
be
applied
to

    new
paradigms
• JRuby,
Groovy
acLvely
working
on
JSR‐292

  support
• For
example,
JRuby
can
cut
80%
of
linking/
  calling
code
in
runLme

     7/7/2011                         Java
7
Launch
Event
Java
7
Launch

  Beyond
Java
7




                  @Sander_Mak
Ader
JDK7





    7/7/2011   Java
7
Launch
Event
JDK8:
Coin
conLnued
                                                                  Java
7

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



                                                                  Java
8
// List literal:
List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];
Integer first = piDigits[0];

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



       7/7/2011                             Java
7
Launch
Event
JDK8:
Project
Lambda
• Add
first‐class
funcLons
• Single
Abstract
Method
types
• Solve
interface
evoluLon
with

‘defender

  methods’
• Paves
way
for
parallel
collecLons
                                                               Java
8
// Lambda expression
List<Integer> list = [1,2,3];
list.forEach(#{ e -> e * 2; });

// Reference existing methods
Person[] people = ...
Arrays.sort(people, #Person.compareByAge);


        7/7/2011                             Java
7
Launch
Event
JDK8:
Modularity
JSR‐294
‘Project
Jigsaw’,
goals:


• Modular
JDK
  - SE
Core
  - Packages:
Swing,
CORBA,
XML,
etc.
• Modular
and
versioned
applicaLons
• Integrate
with
plamorm
dependency

  management


       7/7/2011                    Java
7
Launch
Event
JDK8


              Available
Fall/Winter
of




          See
you
@
next
launch
event?


   7/7/2011                              Java
7
Launch
Event

More Related Content

Java 7: Fork/Join, Invokedynamic and the future

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  9. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  10. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  11. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  12. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  13. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  14. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  15. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  16. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  17. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  18. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  19. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  20. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  21. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  22. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  23. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  24. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  25. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  26. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  27. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  28. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  29. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  30. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  31. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  32. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  33. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  34. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  35. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  36. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  37. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  38. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  39. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  40. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  41. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  42. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  43. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  44. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  45. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  46. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  47. Interessante ontwikkeling is dat Sun dit steunt (JavaFX, maar ook JRuby/Jython)\n\nWaarom zoveel talen? Ze bieden allemaal hun eigen &amp;#x2018;werkelijkheid&amp;#x2019; (volgende slide)\n
  48. *Java (taal) bevat ook ficties!\n*Schoen gaat wringen wanneer language fictions realiteit van JVM moeten gaan verbergen/opleuken\n* Zelfs in Java (Generics) is dat merkbaar... dat is waar tradeoffs (snelheid/bruikaarheid/correctheid) ontstaan\n\nFocus on JRuby in this pres. since very active in JSR-292 \n
  49. *Java (taal) bevat ook ficties!\n*Schoen gaat wringen wanneer language fictions realiteit van JVM moeten gaan verbergen/opleuken\n* Zelfs in Java (Generics) is dat merkbaar... dat is waar tradeoffs (snelheid/bruikaarheid/correctheid) ontstaan\n\nFocus on JRuby in this pres. since very active in JSR-292 \n
  50. *Java (taal) bevat ook ficties!\n*Schoen gaat wringen wanneer language fictions realiteit van JVM moeten gaan verbergen/opleuken\n* Zelfs in Java (Generics) is dat merkbaar... dat is waar tradeoffs (snelheid/bruikaarheid/correctheid) ontstaan\n\nFocus on JRuby in this pres. since very active in JSR-292 \n
  51. \n
  52. * Started 2007/2008\n* Open-ended experiment from Sun. Wild ideas considered, but must prove useful to reach Java SE 7\n
  53. \n
  54. * for core types specialized invokers may be packaged with ruby (but: wasteful, 100s of small classes)\n
  55. \n
  56. * Signature polymorphism (there is no actual invoke method conforming to the MethodType)\n* results in invokevirtual call on MethodHandle class, which then dispatches to the correct code (if type sig matches!)\n* pass target object as first param when virtual method is concerned\n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. This was already possible (hence the existing JVM languages), but is now architecturally supported. Therefore: easier to implement, more speed through optimizations etc.\n
  67. JRuby may throw away 80-90% of it&amp;#x2019;s calling-runtime, and win enormously.\n
  68. \n
  69. \n\n
  70. \n\n
  71. \n\n
  72. \n\n
  73. \n\n