SlideShare a Scribd company logo
<Insert Picture Here>




The Future of the Java Platform:
Java SE 7 & Java SE 8
Terrence Barr
Senior Technologist, Mobile & Embedded Technologies
The preceding 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
                                                      2
Agenda

   Small
(Language)     Project Coin (JSR 334)
 Changes
Project Coin
               Small Language Changes

               The DaVinci Machine
               Multiple Languages on the JVM
               invokedynamic (JSR 292)
               Library changes
               Miscellaneous Updates

               JSR 337:
               Java SE 8 Release Contents

                                               3
                                               3
Evolving the Language
From “Evolving the Java Language” - JavaOne 2005
• Java language principles
  –   Reading is more important than writing
  –   The language should not hide what is happening
  –   Code should do what it seems to do
  –   Simplicity matters
  –   Every “good” feature adds more “bad” weight
  –   Sometimes it is best to leave things out
• One language: with the same meaning everywhere
  • No dialects
• We will evolve the Java language
  • But cautiously, with a long term view
  • “first, do no harm”
  • Beware: Changes have many downstream implications (spec, tests,
    implementation(s), tools, compatibility, future, ...)


                                                                      4
                                                                      4
Java Standard Edition (Java SE) vs.
 Java Development Kit (JDK)
• Java SE                        • Java Development Kit
  • Definition of the software     • Oracle's implementation of
    platform                         Java SE
     • Specification documents     • Additional features not in
     • Implementation                the spec
     • Test suite (TCK)            • Tools and documentation
  • Implemented by several         • Deployment and
    groups                           management capabilities
  • Produced in the JCP            • Performance features
                                   • Produced in the OpenJDK
                                     project




                                                                  5
                                                                  5
Java SE 7

            6
            6
Small
Section Divider
                          <Insert Picture Here>




    (Language)
     Changes
           Project Coin
                                           7
                                           7
Project Coin Constraints

• Small   language changes
   • Small in specification, implementation, testing
   • No new keywords!
   • Wary of type system changes
• Coordinate with larger language changes
   – Project Lambda
   – Modularity
• One language, one javac




                                                       8
                                                       8
Better Integer Literal

• Binary literals

  int mask = 0b101010101010;


• With underscores for clarity

  int mask = 0b1010_1010_1010;
  long big = 9_223_783_036_967_937L;




                                       9
                                       9
String Switch Statement

• Today case label includes integer constants and
  enum constants
• Strings are constants too (immutable)




                                                    10
                                                    10
Discriminating Strings Today

int monthNameToDays(String s, int year) {

  if("April".equals(s) || "June".equals(s) ||
       "September".equals(s) ||"November".equals(s))
    return 30;

  if("January".equals(s) || "March".equals(s) ||
    "May".equals(s) || "July".equals(s) ||
    "August".equals(s) || "December".equals(s))
       return 31;

  if("February".equals(s))
    ...



                                                       11
                                                       11
Strings in Switch
int monthNameToDays(String s, int year) {
  switch(s) {
    case "April": case "June":
    case "September": case "November":
      return 30;

    case "January": case "March":
    case "May": case "July":
    case "August": case "December":
      return 31;

    case "February":
      ...
    default:
      ...

                                            12
                                            12
Simplifying Generics

• Pre-generics
  List strList = new ArrayList();




                                    13
                                    13
Simplifying Generics

• Pre-generics
  List strList = new ArrayList();
• With Generics
List<String> strList = new ArrayList<String>();




                                              14
                                              14
Simplifying Generics

• Pre-generics
  List strList = new ArrayList();
• With Generics
 List<String> strList = new ArrayList<String>();
 List<Map<String, List<String>> strList =
     new ArrayList<Map<String, List<String>>();




                                               15
                                               15
Diamond Operator

• Pre-generics
  List strList = new ArrayList();
• With Generics
 List<String> strList = new ArrayList<String>();
 List<Map<String, List<String>> strList =
     new ArrayList<Map<String, List<String>>();

• With diamond (<>) compiler infers type
 List<String> strList = new ArrayList<>();
 List<Map<String, List<String>> strList =
     new ArrayList<>();


                                              16
                                               16
Simplifying Resource Use

InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);

byte[] buf = new byte[8192];
int n;

while (n = in.read(buf)) >= 0)
  out.write(buf, 0, n);




                                                 17
                                                 17
Simplifying Resource Use

InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);

try {
  byte[] buf = new byte[8192];
  int n;
  while (n = in.read(buf)) >= 0)
    out.write(buf, 0, n);
} finally {
  in.close();
  out.close();
}


                                                 18
                                                 18
Simplifying Resource Use
InputStream in = new FileInputStream(src);
try {
  OutputStream out = new FileOutputStream(dest);
  try {
    byte[] buf = new byte[8192];
    int n;
    while (n = in.read(buf)) >= 0)
      out.write(buf, 0, n);
  } finally {
    out.close();
  }
} finally {
  in.close();
}

                                                   19
                                                   19
Automatic Resource Management

try (InputStream in = new FileInputStream(src),
     OutputStream out = new FileOutputStream(dest))
{
  byte[] buf = new byte[8192];
  int n;
  while (n = in.read(buf)) >= 0)
    out.write(buf, 0, n);
}




                                                 20
                                                  20
Exceptions Galore
try {
  ...
} catch(ClassNotFoundException cnfe) {
  doSomething(cnfe);
  throw cnfe;
} catch(InstantiationException ie) {
  log(ie);
  throw ie;
} catch(NoSuchMethodException nsme) {
  log(nsme);
  throw nsme;
} catch(InvocationTargetException ite) {
  log(ite);
  throw ite;
}


                                           21
                                           21
Multi-Catch
try {
  // Reflective operations calling Class.forName,
  // Class.newInstance, Class.getMethod,
  // Method.invoke, etc.
} catch (final ClassCastException e) {
  doSomething(e);
  throw e;
} catch(final InstantiationException |
    NoSuchMethodException |
    InvocationTargetException e) {
  log(e);
  throw e;
}


                                               22
                                                22
More Precise Rethrow
 try {
   // Reflective operations calling Class.forName,
   // Class.newInstance, Class.getMethod,
   // Method.invoke, etc.
 } catch(final ReflectiveOperationException e) {
   //e means any of the subtype thrown from try {}
   log(e);
                            ReflectiveOperationException
   throw e;
 }
       ClassNotFoundException

          InstantiationException

           NoSuchMethodException

     InvocationTargetException


http://download.java.net/jdk7/docs/api/java/lang/ReflectiveOperationException.html23
                                                                                  23
The DaVinci Machine Project
JSR 292
A multi-language renaissance for the JVM
openjdk.java.net/projects/mlvm
●   Dynamic Invocation
     ●   InvokeDynamic bytecode
●   Method Handles




                                           24
                                           24
25
25
JVM Architecture

• Stack based
  • Push operand on to the stack
  • Instructions operates by popping data off the stack
  • Pushes result back on the stack
• Data types
  • Eight primitive types, objects and arrays
• Object model – single inheritance with interfaces
• Method resolution
  • Receiver and method name
  • Statically typed for parameters and return types
  • Dynamic linking + static type checking
     • Verified at runtime

                                                          26
                                                          26
JVM Specification

“The Java virtual machine knows
      nothing about the Java
programming language, only of a
particular binary format, the class
            file format.”
            1.2 The Java Virtual Machine Spec.


                                             27
                                                 27
Languages Running on the JVM
                                                                 Tea
 Zigzag                                   JESS                     Jickle     iScript
               Modula-2                                  Lisp
        Correlate          Nice
                                                 CAL
                                                                 JudoScript
                                                                            JavaScript
                      Simkin                Drools   Basic
 Icon     Groovy                 Eiffel
                                               v-language               Pascal Luck
                       Prolog        Mini
               Tcl                                      PLAN       Hojo
Rexx                   Jython                                                   Scala
                                                               Funnel
          Tiger      Anvil                             Yassl                Oberon
                                                                               FScript
   E                         Smalltalk
          Logo
             Tiger                                  JHCR           JRuby
  Ada           G                                  Scheme
                      Clojure
                                                               Phobos
 Processing WebL Dawn                             TermWare
                                                                                 Sather
                                                                              Sleep
                    LLP                                            Pnuts      Bex Script
       BeanShell      Forth                       PHP
                                C#
                                     Yoix            SALSA ObjectScript
                                                  Piccola
                                                                                                28

                                                                                           28
                                                                                           28
Method Calls
● Calling a method is cheap
  (VMs can even inline!)
● Selecting the right target

  method can be expensive
      ●   Static languages do most of their method selection at
          compile time
            ●   Single-dispatch on receiver type is left for runtime
      ●   Dynamic languages do almost none at compile time
            ●   But it would be nice to not have to re-do method selection
                for every single invocation
●   Each Language has its own
    ideas about linkage




                                                                             29
                                                                             29
InvokeDynamic Bytecode

• JVM currently has four ways to invoke method
  • Invokevirtual, invokeinterface, invokestatic, invokespecial
• All require full method signature data
• InvokeDynamic will use method handle
  • Effectively an indirect pointer to the method
• When dynamic method is first called bootstrap code
  determines method and creates handle
• Subsequent calls simply reference defined handle
• Type changes force a re-compute of the method
  location and an update to the handle
  • Method call changes are invisible to calling code


                                                                  30
                                                                  30
Library
Changes

           31
           31
New I/O 2 (NIO2) Libraries
 JSR 203

• Original Java I/O APIs presented challenges for
  developers
  •   Not designed to be extensible
  •   Many methods do not throw exceptions as expected
  •   rename() method works inconsistently
  •   Developers want greater access to file metadata
• Java NIO2 solves these problems




                                                         32
                                                         32
Java NIO2 Features
• Path is a replacement for File
  • Biggest impact on developers
• Better directory support
  • list() method can stream via iterator
  • Entries can be filtered using regular expressions in API
• Symbolic link support
• Two security models (POSIX, ACL based on NFSv4)
• java.nio.file.Filesystem
  • interface to a filesystem (FAT, ZFS, Zip archive, network, etc)
• java.nio.file.attribute package
  • Access to file metadata



                                                                      33
                                                                      33
Concurrency APIs

• JSR166y
  • Update to JSR166x which was an update to JSR166
• Adds a lightweight task framework
  • Also referred to as Fork/Join
• Uses ParallelArray
  • Greatly simplifies use of many cores/processors for tasks that
    can easily be separated




                                                                     34
                                                                     34
Client Libraries

•   Nimbus Look and Feel
•   Platform APIs for shaped and translucent windows
•   JLayer (formerly from Swing labs)
•   Optimized 2D rendering




                                                       35
                                                       35
Nimbus Look and Feel




                       36
                       36
JLayer component
Easy enrichment for Swing components




                                       37
                                       37
JLayer component
    The universal decorator

• Transparent decorator for a Swing component
• Controls the painting of its subcomponents
• Catches all input and focus events for the whole hierarchy


  // wrap your component with JLayer
  JLayer<JPanel> layer = new JLayer<JPanel>(panel);

  // custom ui provides all extra functionality
  layer.setUI(myLayerUI);

  // add the layer as usual component
  frame.add(layer);



                                                               38
                                                               38
Miscellaneous Updates

• Security
    • Eliptic curve cryptography
    • TLS 1.2
•   JAXP 1.4.4 (Java API for XML processing)
•   JAX-WS 2.2 (Java API for XML Web Services)
•   JAXB 2.2 (Java Architecture for XML Binding)
•   ClassLoader architecture changes
•   close() for URLClassLoader
•   Javadoc support for CSS



                                                   39
                                                   39
Platform Support

• Windows (x86)
• Linux (x86)
  • Redhat
  • Ubuntu
• Solaris (x86)
• New: Apple OSX (x86)




                         40
                         40
Java SE 8

            41
            41
Java SE 8
        Project Jigsaw
        Modularising the Java Platform



        Project Lambda (JSR 335)
        Closures and more
        Better support for multi-core processors

        More Project Coin
        Small Language Changes



                                                   42
                                                   42
The Modular Java Platform
• Enables escape from “JAR Hell”
   – Eliminates class path
   – Package modules for automatic download & install
   – Generate native packages – deb, rpm, ips, etc
• Enables significant performance improvements
   – Incremental download → fast classloading
   – Optimise module content during installation
• Platform scalability – down to small devices
   – Well-specified SE subsets can fit into small devices




                                                            43
                                                            43
module-info.java


Entry point   Module name
                            Version

module com.foo @ 1.0.0 {
  class com.foo.app.Main
  requires org.bar.lib @ 2.1-alpha;
  requires edu.baz.util @ 5.2_11;
  provides com.foo.app.lib @ 1.0.0;
}

               Dependency
  Virtual module

                                      44
                                      44
Project Lambda
Closures and more
openjdk.java.net/projects/lambda


● Lambda expressions
● SAM conversion with target typing


● Method references


● Library enhancements for internal iteration


● Default methods for interface evolution




                                                45
                                                45
Hypothetical Internal Iteration
double highestScore = students
     .filter(new Predicate<Student>() {
        public boolean isTrue(Student s) {
           return s.gradYear == 2010;
        }})
     .map(new Extractor<Student,Double>() {
        public Double extract(Student s) {
           return s.score;
        }})
     .max();
• Not inherently serial
   – students traversal not determined by developer
   – Looks like a functional language
• Anonymous inner class!


                                                      46
                                                      46
Introducing Lambda Expressions

double highestScore = students
    .filter(#{ Student s -> s.gradYear == 2010 })
    .map(#{ Student s -> s.score })
    .max();

  • Lambda expressions introduced with #
     – Signal to the JVM to defer execution of the code
     – Body may be an expression
  • Lambda expression are not syntactic sugar for
    anonymous inner class
     – Implemented with MethodHandle from JSR-292



                                                          47
                                                          47
Roadmaps Are Approved!

• JSRs approved by JCP
   – JSR 334: Small enhancements to the Java language
   – JSR 335: Lambda expressions for the Java language
   – JSR 336: Java SE 7 Release Contents
   – JSR 337: Java SE 8 Release Contents
• OpenJDK Releases in 2011 & 2012
  – Committed Features List for 2011:
      • openjdk.java.net/projects/jdk7/features




                                                         48
                                                         48
Conclusions

• Java SE 7
  • Incremental changes
  • Evolutionary, not revolutionary
  • Good solid set of features to make developers life easier
• Java SE 8
  • Major new features: Modularisation and Closures
  • More smaller features to be defined
• Java Evolution Continues
  • Grow and adapt to the changing world of IT
  • Oracle and its partners are committed to a vibrant and
    evolving Java ecosystem


                                                                49
                                                                49
50
50

More Related Content

What's hot

Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Yardena Meymann
 
How Scala code is expressed in the JVM
How Scala code is expressed in the JVMHow Scala code is expressed in the JVM
How Scala code is expressed in the JVM
Koichi Sakata
 
Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010
Derek Chen-Becker
 
Java concurrency
Java concurrencyJava concurrency
Java concurrency
Hithem Ahmed
 
Groovy DSLs (JavaOne Presentation)
Groovy DSLs (JavaOne Presentation)Groovy DSLs (JavaOne Presentation)
Groovy DSLs (JavaOne Presentation)Jim Driscoll
 
Clojure, Plain and Simple
Clojure, Plain and SimpleClojure, Plain and Simple
Clojure, Plain and Simple
Ben Mabey
 
Spring data requery
Spring data requerySpring data requery
Spring data requery
Sunghyouk Bae
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developers
Bartosz Kosarzycki
 
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Sunghyouk Bae
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projects
Bartosz Kosarzycki
 
Stepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to ScalaStepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to Scala
Derek Chen-Becker
 
Workshop Scala
Workshop ScalaWorkshop Scala
Workshop Scala
Bert Van Vreckem
 
Building High Perf Web Apps - IE8 Firestarter
Building High Perf Web Apps - IE8 FirestarterBuilding High Perf Web Apps - IE8 Firestarter
Building High Perf Web Apps - IE8 Firestarter
Mithun T. Dhar
 
Requery overview
Requery overviewRequery overview
Requery overview
Sunghyouk Bae
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
Jonas Bonér
 
Functional java 8
Functional java 8Functional java 8
Functional java 8
nick_maiorano
 

What's hot (20)

Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008
 
How Scala code is expressed in the JVM
How Scala code is expressed in the JVMHow Scala code is expressed in the JVM
How Scala code is expressed in the JVM
 
Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010Starting with Scala : Frontier Developer's Meetup December 2010
Starting with Scala : Frontier Developer's Meetup December 2010
 
Elementary Sort
Elementary SortElementary Sort
Elementary Sort
 
Java concurrency
Java concurrencyJava concurrency
Java concurrency
 
Groovy DSLs (JavaOne Presentation)
Groovy DSLs (JavaOne Presentation)Groovy DSLs (JavaOne Presentation)
Groovy DSLs (JavaOne Presentation)
 
04 sorting
04 sorting04 sorting
04 sorting
 
Clojure, Plain and Simple
Clojure, Plain and SimpleClojure, Plain and Simple
Clojure, Plain and Simple
 
Spring data requery
Spring data requerySpring data requery
Spring data requery
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developers
 
Java tutorials
Java tutorialsJava tutorials
Java tutorials
 
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projects
 
Stepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to ScalaStepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to Scala
 
Workshop Scala
Workshop ScalaWorkshop Scala
Workshop Scala
 
Building High Perf Web Apps - IE8 Firestarter
Building High Perf Web Apps - IE8 FirestarterBuilding High Perf Web Apps - IE8 Firestarter
Building High Perf Web Apps - IE8 Firestarter
 
Requery overview
Requery overviewRequery overview
Requery overview
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
Functional java 8
Functional java 8Functional java 8
Functional java 8
 
Scala
ScalaScala
Scala
 

Viewers also liked

Storage&data management solutions
Storage&data management solutionsStorage&data management solutions
Storage&data management solutionsAgora Group
 
Genesys - 14oct2010
Genesys - 14oct2010Genesys - 14oct2010
Genesys - 14oct2010
Agora Group
 
Zitec Studiu de caz paravion
Zitec Studiu de caz paravionZitec Studiu de caz paravion
Zitec Studiu de caz paravionAgora Group
 
Stefan bargaoanu we're agile. and now what v1.1
Stefan bargaoanu we're agile. and now what v1.1Stefan bargaoanu we're agile. and now what v1.1
Stefan bargaoanu we're agile. and now what v1.1Agora Group
 
Acceleris - 27oct2010
Acceleris - 27oct2010Acceleris - 27oct2010
Acceleris - 27oct2010
Agora Group
 
Adr-sv - 18nov2010-2
Adr-sv - 18nov2010-2Adr-sv - 18nov2010-2
Adr-sv - 18nov2010-2Agora Group
 
2009-dec02_Fujitsu
2009-dec02_Fujitsu2009-dec02_Fujitsu
2009-dec02_Fujitsu
Agora Group
 
It securepro 10 nov 2010
It securepro   10 nov 2010It securepro   10 nov 2010
It securepro 10 nov 2010Agora Group
 

Viewers also liked (9)

Ibm 18nov2010
Ibm 18nov2010Ibm 18nov2010
Ibm 18nov2010
 
Storage&data management solutions
Storage&data management solutionsStorage&data management solutions
Storage&data management solutions
 
Genesys - 14oct2010
Genesys - 14oct2010Genesys - 14oct2010
Genesys - 14oct2010
 
Zitec Studiu de caz paravion
Zitec Studiu de caz paravionZitec Studiu de caz paravion
Zitec Studiu de caz paravion
 
Stefan bargaoanu we're agile. and now what v1.1
Stefan bargaoanu we're agile. and now what v1.1Stefan bargaoanu we're agile. and now what v1.1
Stefan bargaoanu we're agile. and now what v1.1
 
Acceleris - 27oct2010
Acceleris - 27oct2010Acceleris - 27oct2010
Acceleris - 27oct2010
 
Adr-sv - 18nov2010-2
Adr-sv - 18nov2010-2Adr-sv - 18nov2010-2
Adr-sv - 18nov2010-2
 
2009-dec02_Fujitsu
2009-dec02_Fujitsu2009-dec02_Fujitsu
2009-dec02_Fujitsu
 
It securepro 10 nov 2010
It securepro   10 nov 2010It securepro   10 nov 2010
It securepro 10 nov 2010
 

Similar to Terence Barr - jdk7+8 - 24mai2011

Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from OredevJava 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from Oredev
Mattias Karlsson
 
Java 7 & 8 New Features
Java 7 & 8 New FeaturesJava 7 & 8 New Features
Java 7 & 8 New Features
Leandro Coutinho
 
55 New Features in Java 7
55 New Features in Java 755 New Features in Java 7
55 New Features in Java 7
Boulder Java User's Group
 
Shiksharth com java_topics
Shiksharth com java_topicsShiksharth com java_topics
Shiksharth com java_topics
Rajesh Verma
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Ritter
catherinewall
 
Java introduction
Java introductionJava introduction
Java introduction
Migrant Systems
 
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...Paul King
 
Clojure And Swing
Clojure And SwingClojure And Swing
Clojure And Swing
Skills Matter
 
PostgreSQL and PL/Java
PostgreSQL and PL/JavaPostgreSQL and PL/Java
PostgreSQL and PL/Java
Peter Eisentraut
 
DevNexus 2020: Discover Modern Java
DevNexus 2020: Discover Modern JavaDevNexus 2020: Discover Modern Java
DevNexus 2020: Discover Modern Java
Henri Tremblay
 
JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"
JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"
JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"
GeeksLab Odessa
 
Back to the future with Java 7 (Geekout June/2011)
Back to the future with Java 7 (Geekout June/2011)Back to the future with Java 7 (Geekout June/2011)
Back to the future with Java 7 (Geekout June/2011)
Martijn Verburg
 
Java jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3mJava jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3m
Steve Elliott
 
Using Stratego/XT for generation of software connectors.
Using Stratego/XT for generation of software connectors.Using Stratego/XT for generation of software connectors.
Using Stratego/XT for generation of software connectors.
Michal Malohlava
 
Java
JavaJava
Atlassian Groovy Plugins
Atlassian Groovy PluginsAtlassian Groovy Plugins
Atlassian Groovy Plugins
Paul King
 
Clojure - A new Lisp
Clojure - A new LispClojure - A new Lisp
Clojure - A new Lispelliando dias
 
Modern_Java_Workshop manjunath np hj slave
Modern_Java_Workshop manjunath np hj slaveModern_Java_Workshop manjunath np hj slave
Modern_Java_Workshop manjunath np hj slave
gangadharnp111
 

Similar to Terence Barr - jdk7+8 - 24mai2011 (20)

Java 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from OredevJava 7 Whats New(), Whats Next() from Oredev
Java 7 Whats New(), Whats Next() from Oredev
 
Java 7 & 8 New Features
Java 7 & 8 New FeaturesJava 7 & 8 New Features
Java 7 & 8 New Features
 
55 New Features in Java 7
55 New Features in Java 755 New Features in Java 7
55 New Features in Java 7
 
Shiksharth com java_topics
Shiksharth com java_topicsShiksharth com java_topics
Shiksharth com java_topics
 
Unit 1
Unit 1Unit 1
Unit 1
 
Java Future S Ritter
Java Future S RitterJava Future S Ritter
Java Future S Ritter
 
Java introduction
Java introductionJava introduction
Java introduction
 
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
Industrial Strength Groovy - Tools for the Professional Groovy Developer: Pau...
 
Clojure And Swing
Clojure And SwingClojure And Swing
Clojure And Swing
 
PostgreSQL and PL/Java
PostgreSQL and PL/JavaPostgreSQL and PL/Java
PostgreSQL and PL/Java
 
DevNexus 2020: Discover Modern Java
DevNexus 2020: Discover Modern JavaDevNexus 2020: Discover Modern Java
DevNexus 2020: Discover Modern Java
 
JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"
JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"
JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"
 
Back to the future with Java 7 (Geekout June/2011)
Back to the future with Java 7 (Geekout June/2011)Back to the future with Java 7 (Geekout June/2011)
Back to the future with Java 7 (Geekout June/2011)
 
Java jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3mJava jdk-update-nov10-sde-v3m
Java jdk-update-nov10-sde-v3m
 
Using Stratego/XT for generation of software connectors.
Using Stratego/XT for generation of software connectors.Using Stratego/XT for generation of software connectors.
Using Stratego/XT for generation of software connectors.
 
55j7
55j755j7
55j7
 
Java
JavaJava
Java
 
Atlassian Groovy Plugins
Atlassian Groovy PluginsAtlassian Groovy Plugins
Atlassian Groovy Plugins
 
Clojure - A new Lisp
Clojure - A new LispClojure - A new Lisp
Clojure - A new Lisp
 
Modern_Java_Workshop manjunath np hj slave
Modern_Java_Workshop manjunath np hj slaveModern_Java_Workshop manjunath np hj slave
Modern_Java_Workshop manjunath np hj slave
 

More from Agora Group

How to Digitally Transform and Stay Competitive with a Zero-code Digital Busi...
How to Digitally Transform and Stay Competitive with a Zero-code Digital Busi...How to Digitally Transform and Stay Competitive with a Zero-code Digital Busi...
How to Digitally Transform and Stay Competitive with a Zero-code Digital Busi...
Agora Group
 
Microservicii reutilizabile in arhitecturi bazate pe procese
Microservicii reutilizabile in arhitecturi bazate pe proceseMicroservicii reutilizabile in arhitecturi bazate pe procese
Microservicii reutilizabile in arhitecturi bazate pe procese
Agora Group
 
The role of BPM in Paradigms Shift
The role of BPM in Paradigms ShiftThe role of BPM in Paradigms Shift
The role of BPM in Paradigms Shift
Agora Group
 
Prezentare Ensight_BPM-20171004
Prezentare Ensight_BPM-20171004Prezentare Ensight_BPM-20171004
Prezentare Ensight_BPM-20171004
Agora Group
 
Curs Digital Forensics
Curs Digital ForensicsCurs Digital Forensics
Curs Digital ForensicsAgora Group
 
The next generation of Companies management: state of the art in BPM
The next generation of Companies management: state of the art in BPMThe next generation of Companies management: state of the art in BPM
The next generation of Companies management: state of the art in BPM
Agora Group
 
Speed Dialing the Enterprise
Speed Dialing the EnterpriseSpeed Dialing the Enterprise
Speed Dialing the Enterprise
Agora Group
 
ABPMP Romania
ABPMP RomaniaABPMP Romania
ABPMP Romania
Agora Group
 
Arhitectura proceselor în Sistemul Informațional de Sănătate
Arhitectura proceselor în Sistemul Informațional de SănătateArhitectura proceselor în Sistemul Informațional de Sănătate
Arhitectura proceselor în Sistemul Informațional de Sănătate
Agora Group
 
IBM’s Smarter Process Reinvent Business
IBM’s Smarter Process Reinvent BusinessIBM’s Smarter Process Reinvent Business
IBM’s Smarter Process Reinvent Business
Agora Group
 
eHealth 2014_Radu Dop
eHealth 2014_Radu DopeHealth 2014_Radu Dop
eHealth 2014_Radu Dop
Agora Group
 
Importanța registrelor pentru pacienți
Importanța registrelor pentru paciențiImportanța registrelor pentru pacienți
Importanța registrelor pentru pacienți
Agora Group
 
CYBERCRIME AND THE HEALTHCARE INDUSTRY: Sistemul de sănătate, noua țintă a at...
CYBERCRIME AND THE HEALTHCARE INDUSTRY: Sistemul de sănătate, noua țintă a at...CYBERCRIME AND THE HEALTHCARE INDUSTRY: Sistemul de sănătate, noua țintă a at...
CYBERCRIME AND THE HEALTHCARE INDUSTRY: Sistemul de sănătate, noua țintă a at...
Agora Group
 
Perspective naționale și internaționale ale informaticii și standardelor medi...
Perspective naționale și internaționale ale informaticii și standardelor medi...Perspective naționale și internaționale ale informaticii și standardelor medi...
Perspective naționale și internaționale ale informaticii și standardelor medi...
Agora Group
 
UTI_Dosarul electronic de sanatate
UTI_Dosarul electronic de sanatateUTI_Dosarul electronic de sanatate
UTI_Dosarul electronic de sanatate
Agora Group
 
Class IT - Enemy inside the wire
Class IT - Enemy inside the wireClass IT - Enemy inside the wire
Class IT - Enemy inside the wireAgora Group
 
Infologica - auditarea aplicatiilor mobile
Infologica - auditarea aplicatiilor mobileInfologica - auditarea aplicatiilor mobile
Infologica - auditarea aplicatiilor mobileAgora Group
 
Agora Securitate yugo neumorni
Agora Securitate yugo neumorniAgora Securitate yugo neumorni
Agora Securitate yugo neumorniAgora Group
 
Security threats in the LAN
Security threats in the LANSecurity threats in the LAN
Security threats in the LANAgora Group
 

More from Agora Group (20)

How to Digitally Transform and Stay Competitive with a Zero-code Digital Busi...
How to Digitally Transform and Stay Competitive with a Zero-code Digital Busi...How to Digitally Transform and Stay Competitive with a Zero-code Digital Busi...
How to Digitally Transform and Stay Competitive with a Zero-code Digital Busi...
 
Microservicii reutilizabile in arhitecturi bazate pe procese
Microservicii reutilizabile in arhitecturi bazate pe proceseMicroservicii reutilizabile in arhitecturi bazate pe procese
Microservicii reutilizabile in arhitecturi bazate pe procese
 
The role of BPM in Paradigms Shift
The role of BPM in Paradigms ShiftThe role of BPM in Paradigms Shift
The role of BPM in Paradigms Shift
 
Prezentare Ensight_BPM-20171004
Prezentare Ensight_BPM-20171004Prezentare Ensight_BPM-20171004
Prezentare Ensight_BPM-20171004
 
Curs OSINT
Curs OSINTCurs OSINT
Curs OSINT
 
Curs Digital Forensics
Curs Digital ForensicsCurs Digital Forensics
Curs Digital Forensics
 
The next generation of Companies management: state of the art in BPM
The next generation of Companies management: state of the art in BPMThe next generation of Companies management: state of the art in BPM
The next generation of Companies management: state of the art in BPM
 
Speed Dialing the Enterprise
Speed Dialing the EnterpriseSpeed Dialing the Enterprise
Speed Dialing the Enterprise
 
ABPMP Romania
ABPMP RomaniaABPMP Romania
ABPMP Romania
 
Arhitectura proceselor în Sistemul Informațional de Sănătate
Arhitectura proceselor în Sistemul Informațional de SănătateArhitectura proceselor în Sistemul Informațional de Sănătate
Arhitectura proceselor în Sistemul Informațional de Sănătate
 
IBM’s Smarter Process Reinvent Business
IBM’s Smarter Process Reinvent BusinessIBM’s Smarter Process Reinvent Business
IBM’s Smarter Process Reinvent Business
 
eHealth 2014_Radu Dop
eHealth 2014_Radu DopeHealth 2014_Radu Dop
eHealth 2014_Radu Dop
 
Importanța registrelor pentru pacienți
Importanța registrelor pentru paciențiImportanța registrelor pentru pacienți
Importanța registrelor pentru pacienți
 
CYBERCRIME AND THE HEALTHCARE INDUSTRY: Sistemul de sănătate, noua țintă a at...
CYBERCRIME AND THE HEALTHCARE INDUSTRY: Sistemul de sănătate, noua țintă a at...CYBERCRIME AND THE HEALTHCARE INDUSTRY: Sistemul de sănătate, noua țintă a at...
CYBERCRIME AND THE HEALTHCARE INDUSTRY: Sistemul de sănătate, noua țintă a at...
 
Perspective naționale și internaționale ale informaticii și standardelor medi...
Perspective naționale și internaționale ale informaticii și standardelor medi...Perspective naționale și internaționale ale informaticii și standardelor medi...
Perspective naționale și internaționale ale informaticii și standardelor medi...
 
UTI_Dosarul electronic de sanatate
UTI_Dosarul electronic de sanatateUTI_Dosarul electronic de sanatate
UTI_Dosarul electronic de sanatate
 
Class IT - Enemy inside the wire
Class IT - Enemy inside the wireClass IT - Enemy inside the wire
Class IT - Enemy inside the wire
 
Infologica - auditarea aplicatiilor mobile
Infologica - auditarea aplicatiilor mobileInfologica - auditarea aplicatiilor mobile
Infologica - auditarea aplicatiilor mobile
 
Agora Securitate yugo neumorni
Agora Securitate yugo neumorniAgora Securitate yugo neumorni
Agora Securitate yugo neumorni
 
Security threats in the LAN
Security threats in the LANSecurity threats in the LAN
Security threats in the LAN
 

Recently uploaded

GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 

Recently uploaded (20)

GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 

Terence Barr - jdk7+8 - 24mai2011

  • 1. <Insert Picture Here> The Future of the Java Platform: Java SE 7 & Java SE 8 Terrence Barr Senior Technologist, Mobile & Embedded Technologies
  • 2. The preceding 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 2
  • 3. Agenda Small (Language) Project Coin (JSR 334) Changes Project Coin Small Language Changes The DaVinci Machine Multiple Languages on the JVM invokedynamic (JSR 292) Library changes Miscellaneous Updates JSR 337: Java SE 8 Release Contents 3 3
  • 4. Evolving the Language From “Evolving the Java Language” - JavaOne 2005 • Java language principles – Reading is more important than writing – The language should not hide what is happening – Code should do what it seems to do – Simplicity matters – Every “good” feature adds more “bad” weight – Sometimes it is best to leave things out • One language: with the same meaning everywhere • No dialects • We will evolve the Java language • But cautiously, with a long term view • “first, do no harm” • Beware: Changes have many downstream implications (spec, tests, implementation(s), tools, compatibility, future, ...) 4 4
  • 5. Java Standard Edition (Java SE) vs. Java Development Kit (JDK) • Java SE • Java Development Kit • Definition of the software • Oracle's implementation of platform Java SE • Specification documents • Additional features not in • Implementation the spec • Test suite (TCK) • Tools and documentation • Implemented by several • Deployment and groups management capabilities • Produced in the JCP • Performance features • Produced in the OpenJDK project 5 5
  • 6. Java SE 7 6 6
  • 7. Small Section Divider <Insert Picture Here> (Language) Changes Project Coin 7 7
  • 8. Project Coin Constraints • Small language changes • Small in specification, implementation, testing • No new keywords! • Wary of type system changes • Coordinate with larger language changes – Project Lambda – Modularity • One language, one javac 8 8
  • 9. Better Integer Literal • Binary literals int mask = 0b101010101010; • With underscores for clarity int mask = 0b1010_1010_1010; long big = 9_223_783_036_967_937L; 9 9
  • 10. String Switch Statement • Today case label includes integer constants and enum constants • Strings are constants too (immutable) 10 10
  • 11. Discriminating Strings Today int monthNameToDays(String s, int year) { if("April".equals(s) || "June".equals(s) || "September".equals(s) ||"November".equals(s)) return 30; if("January".equals(s) || "March".equals(s) || "May".equals(s) || "July".equals(s) || "August".equals(s) || "December".equals(s)) return 31; if("February".equals(s)) ... 11 11
  • 12. Strings in Switch int monthNameToDays(String s, int year) { switch(s) { case "April": case "June": case "September": case "November": return 30; case "January": case "March": case "May": case "July": case "August": case "December": return 31; case "February": ... default: ... 12 12
  • 13. Simplifying Generics • Pre-generics List strList = new ArrayList(); 13 13
  • 14. Simplifying Generics • Pre-generics List strList = new ArrayList(); • With Generics List<String> strList = new ArrayList<String>(); 14 14
  • 15. Simplifying Generics • Pre-generics List strList = new ArrayList(); • With Generics List<String> strList = new ArrayList<String>(); List<Map<String, List<String>> strList = new ArrayList<Map<String, List<String>>(); 15 15
  • 16. Diamond Operator • Pre-generics List strList = new ArrayList(); • With Generics List<String> strList = new ArrayList<String>(); List<Map<String, List<String>> strList = new ArrayList<Map<String, List<String>>(); • With diamond (<>) compiler infers type List<String> strList = new ArrayList<>(); List<Map<String, List<String>> strList = new ArrayList<>(); 16 16
  • 17. Simplifying Resource Use InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest); byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n); 17 17
  • 18. Simplifying Resource Use InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dest); try { byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { in.close(); out.close(); } 18 18
  • 19. Simplifying Resource Use InputStream in = new FileInputStream(src); try { OutputStream out = new FileOutputStream(dest); try { byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n); } finally { out.close(); } } finally { in.close(); } 19 19
  • 20. Automatic Resource Management try (InputStream in = new FileInputStream(src), OutputStream out = new FileOutputStream(dest)) { byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n); } 20 20
  • 21. Exceptions Galore try { ... } catch(ClassNotFoundException cnfe) { doSomething(cnfe); throw cnfe; } catch(InstantiationException ie) { log(ie); throw ie; } catch(NoSuchMethodException nsme) { log(nsme); throw nsme; } catch(InvocationTargetException ite) { log(ite); throw ite; } 21 21
  • 22. Multi-Catch try { // Reflective operations calling Class.forName, // Class.newInstance, Class.getMethod, // Method.invoke, etc. } catch (final ClassCastException e) { doSomething(e); throw e; } catch(final InstantiationException | NoSuchMethodException | InvocationTargetException e) { log(e); throw e; } 22 22
  • 23. More Precise Rethrow try { // Reflective operations calling Class.forName, // Class.newInstance, Class.getMethod, // Method.invoke, etc. } catch(final ReflectiveOperationException e) { //e means any of the subtype thrown from try {} log(e); ReflectiveOperationException throw e; } ClassNotFoundException InstantiationException NoSuchMethodException InvocationTargetException http://download.java.net/jdk7/docs/api/java/lang/ReflectiveOperationException.html23 23
  • 24. The DaVinci Machine Project JSR 292 A multi-language renaissance for the JVM openjdk.java.net/projects/mlvm ● Dynamic Invocation ● InvokeDynamic bytecode ● Method Handles 24 24
  • 25. 25 25
  • 26. JVM Architecture • Stack based • Push operand on to the stack • Instructions operates by popping data off the stack • Pushes result back on the stack • Data types • Eight primitive types, objects and arrays • Object model – single inheritance with interfaces • Method resolution • Receiver and method name • Statically typed for parameters and return types • Dynamic linking + static type checking • Verified at runtime 26 26
  • 27. JVM Specification “The Java virtual machine knows nothing about the Java programming language, only of a particular binary format, the class file format.” 1.2 The Java Virtual Machine Spec. 27 27
  • 28. Languages Running on the JVM Tea Zigzag JESS Jickle iScript Modula-2 Lisp Correlate Nice CAL JudoScript JavaScript Simkin Drools Basic Icon Groovy Eiffel v-language Pascal Luck Prolog Mini Tcl PLAN Hojo Rexx Jython Scala Funnel Tiger Anvil Yassl Oberon FScript E Smalltalk Logo Tiger JHCR JRuby Ada G Scheme Clojure Phobos Processing WebL Dawn TermWare Sather Sleep LLP Pnuts Bex Script BeanShell Forth PHP C# Yoix SALSA ObjectScript Piccola 28 28 28
  • 29. Method Calls ● Calling a method is cheap (VMs can even inline!) ● Selecting the right target method can be expensive ● Static languages do most of their method selection at compile time ● Single-dispatch on receiver type is left for runtime ● Dynamic languages do almost none at compile time ● But it would be nice to not have to re-do method selection for every single invocation ● Each Language has its own ideas about linkage 29 29
  • 30. InvokeDynamic Bytecode • JVM currently has four ways to invoke method • Invokevirtual, invokeinterface, invokestatic, invokespecial • All require full method signature data • InvokeDynamic will use method handle • Effectively an indirect pointer to the method • When dynamic method is first called bootstrap code determines method and creates handle • Subsequent calls simply reference defined handle • Type changes force a re-compute of the method location and an update to the handle • Method call changes are invisible to calling code 30 30
  • 32. New I/O 2 (NIO2) Libraries JSR 203 • Original Java I/O APIs presented challenges for developers • Not designed to be extensible • Many methods do not throw exceptions as expected • rename() method works inconsistently • Developers want greater access to file metadata • Java NIO2 solves these problems 32 32
  • 33. Java NIO2 Features • Path is a replacement for File • Biggest impact on developers • Better directory support • list() method can stream via iterator • Entries can be filtered using regular expressions in API • Symbolic link support • Two security models (POSIX, ACL based on NFSv4) • java.nio.file.Filesystem • interface to a filesystem (FAT, ZFS, Zip archive, network, etc) • java.nio.file.attribute package • Access to file metadata 33 33
  • 34. Concurrency APIs • JSR166y • Update to JSR166x which was an update to JSR166 • Adds a lightweight task framework • Also referred to as Fork/Join • Uses ParallelArray • Greatly simplifies use of many cores/processors for tasks that can easily be separated 34 34
  • 35. Client Libraries • Nimbus Look and Feel • Platform APIs for shaped and translucent windows • JLayer (formerly from Swing labs) • Optimized 2D rendering 35 35
  • 36. Nimbus Look and Feel 36 36
  • 37. JLayer component Easy enrichment for Swing components 37 37
  • 38. JLayer component The universal decorator • Transparent decorator for a Swing component • Controls the painting of its subcomponents • Catches all input and focus events for the whole hierarchy // wrap your component with JLayer JLayer<JPanel> layer = new JLayer<JPanel>(panel); // custom ui provides all extra functionality layer.setUI(myLayerUI); // add the layer as usual component frame.add(layer); 38 38
  • 39. Miscellaneous Updates • Security • Eliptic curve cryptography • TLS 1.2 • JAXP 1.4.4 (Java API for XML processing) • JAX-WS 2.2 (Java API for XML Web Services) • JAXB 2.2 (Java Architecture for XML Binding) • ClassLoader architecture changes • close() for URLClassLoader • Javadoc support for CSS 39 39
  • 40. Platform Support • Windows (x86) • Linux (x86) • Redhat • Ubuntu • Solaris (x86) • New: Apple OSX (x86) 40 40
  • 41. Java SE 8 41 41
  • 42. Java SE 8 Project Jigsaw Modularising the Java Platform Project Lambda (JSR 335) Closures and more Better support for multi-core processors More Project Coin Small Language Changes 42 42
  • 43. The Modular Java Platform • Enables escape from “JAR Hell” – Eliminates class path – Package modules for automatic download & install – Generate native packages – deb, rpm, ips, etc • Enables significant performance improvements – Incremental download → fast classloading – Optimise module content during installation • Platform scalability – down to small devices – Well-specified SE subsets can fit into small devices 43 43
  • 44. module-info.java Entry point Module name Version module com.foo @ 1.0.0 { class com.foo.app.Main requires org.bar.lib @ 2.1-alpha; requires edu.baz.util @ 5.2_11; provides com.foo.app.lib @ 1.0.0; } Dependency Virtual module 44 44
  • 45. Project Lambda Closures and more openjdk.java.net/projects/lambda ● Lambda expressions ● SAM conversion with target typing ● Method references ● Library enhancements for internal iteration ● Default methods for interface evolution 45 45
  • 46. Hypothetical Internal Iteration double highestScore = students .filter(new Predicate<Student>() { public boolean isTrue(Student s) { return s.gradYear == 2010; }}) .map(new Extractor<Student,Double>() { public Double extract(Student s) { return s.score; }}) .max(); • Not inherently serial – students traversal not determined by developer – Looks like a functional language • Anonymous inner class! 46 46
  • 47. Introducing Lambda Expressions double highestScore = students .filter(#{ Student s -> s.gradYear == 2010 }) .map(#{ Student s -> s.score }) .max(); • Lambda expressions introduced with # – Signal to the JVM to defer execution of the code – Body may be an expression • Lambda expression are not syntactic sugar for anonymous inner class – Implemented with MethodHandle from JSR-292 47 47
  • 48. Roadmaps Are Approved! • JSRs approved by JCP – JSR 334: Small enhancements to the Java language – JSR 335: Lambda expressions for the Java language – JSR 336: Java SE 7 Release Contents – JSR 337: Java SE 8 Release Contents • OpenJDK Releases in 2011 & 2012 – Committed Features List for 2011: • openjdk.java.net/projects/jdk7/features 48 48
  • 49. Conclusions • Java SE 7 • Incremental changes • Evolutionary, not revolutionary • Good solid set of features to make developers life easier • Java SE 8 • Major new features: Modularisation and Closures • More smaller features to be defined • Java Evolution Continues • Grow and adapt to the changing world of IT • Oracle and its partners are committed to a vibrant and evolving Java ecosystem 49 49
  • 50. 50 50