java future s ritter

39
What The Future Holds For Java: JDK7 and JavaFX Simon Ritter Technology Evangelist

Upload: catherinewall

Post on 10-May-2015

1.850 views

Category:

Technology


1 download

DESCRIPTION

The next release of the Java Standard Edition is scheduled for the beginning of 2010. In this session we'll review the latest feature list of what's in and what's out of the next version of the JDK. An update on the latest news around JavaFX including the 1.2 release and the general availability of JavaFX Mobile for Windows Mobile devices.

TRANSCRIPT

Page 1: Java Future S Ritter

What The Future Holds For Java: JDK7 and JavaFXSimon RitterTechnology Evangelist

Page 2: Java Future S Ritter

2

Disclaimer

The information in this presentation concerns forward-looking statements based on current expectations and beliefs about future events that are inherently susceptible to uncertainty and changes in circumstance etc. etc. etc.

Page 3: Java Future S Ritter

3

JDK 7 Features> Language

• Annotations on Java types• Small language changes (Project Coin)• Modularity (JSR-294)

> Core• Modularisation (Project Jigsaw)• Concurrency and collections updates• More new IO APIs (NIO.2)• Additional network protocol support• Eliptic curve cryptography• Unicode 5.1

Page 4: Java Future S Ritter

4

JDK 7 Features> VM

• Compressed 64-bit pointers• Garbage-First GC• Support for dynamic languages (Da Vinci Machine

project)> Client

• Swing Application Framework (JSR-296)• Forward port Java SE6 u10 features• XRender pipeline for Java 2D

Page 5: Java Future S Ritter

5

ModularityModularityProject JigsawProject Jigsaw

Page 6: Java Future S Ritter

6

Size Matters> JDK is big, really big

• JDK 1.x – 7 top level packages, 200 classes• JDK 7 – too many top level packages, over 4000 classes• About 12MB today

> Historical baggage• Build as a monolithic software system

> Problems• Download time, startup time, memory footprint, performance• Difficult to fit platform to newer mobile device

- CPU capable, but constrained by memory

> Current solution – use JDK 6u10• Kernel installer, quick startup feature• More like a painkiller, not the antidote

Page 7: Java Future S Ritter

7

New Module System for Java> JSR-294 Improved Modularity Support in the Java

Programming Language> Requirements for JSR-294

• Integrate with the VM• Integrate with the language• Integrate with (platform's) native packaging• Support multi-module packages• Support “friend” modules

> Open JDK's Project Jigsaw• Reference implementation for JSR-294• openjdk.java.net/projects/jigsaw• Can have other type of module systems based on OSGi,

IPS, Debian, etc.

Page 8: Java Future S Ritter

8

Modularizing You Code

planetjdk/src/

org/planetjdk/aggregator/Main.java

module-info.java

planetjdk/src/

org/planetjdk/aggregator/Main.java

Modularize

Page 9: Java Future S Ritter

9

module-info.java

module org.planetjdk.aggregator {

system jigsaw;requires module jdom;requires module tagsoup;requires module rome;requires module rome-fetcher;requires module joda-time;requires module java-xml;requires module java-base;class org.planetjdk.aggregator.Main;

}

Dependencies

Main class

Module name

Module system

Page 10: Java Future S Ritter

10

Compiling Modules

> Infers classes in org.planetjdk.aggregator/* belongs to module org.planetjdk.aggregator• From module-info.java

> Handles mutual dependency• Module A dependent on Module B which is dependent on

Module A

javac -modulepath planetjdk/src:rssutils/romeorg.planetjdk.aggregator/module-info.javaorg.planetjdk.aggregator/org/...com.sun.syndication/module-info.javacom.sun.syndication/com/...

Page 11: Java Future S Ritter

11

Running Modules

> Launcher will look for org.planetjdk.aggregator from modulepath and executes it• Assuming that module is a root module

java -modulepath planetjdk/cls:rssutils/rome-m org.planetjdk.aggregator

Page 12: Java Future S Ritter

12

Module Versioningmodule org.planetjdk.aggregator @ 1.0 {

system jigsaw;requires module jdom @ 1.*;requires module tagsoup @ 1.2.*;requires module rome @ =1.0;requires module rome-fetcher @ =1.0;requires module joda-time @ [1.6,2.0);requires module java-xml @ 7.*;requires module java-base @ 7.*;class org.planetjdk.aggregator.Main;

}

Page 13: Java Future S Ritter

13

Native Packaging> Java does not integrate well with native OS

• JAR files have no well defined relationship to native OS packaging

> Build native packaging from module information> New tool – jpkg

javac -modulepath planetjdk/src:rssutils/rome

-d build/modules org.planetjdk.aggregator/module-info.javaorg.planetjdk.aggregator/org/...

jpkg -L planetjdk/cls:rssutils/rome -m build/modulesdeb -c aggregator

sudo dpkg -i org.planetjdk.aggregator_1.0_all.deb/usr/bin/aggregator

Page 14: Java Future S Ritter

14

SmallSmall(Language)(Language)

ChangesChangesProject CoinProject Coin

Page 15: Java Future S Ritter

15

“Why don't you add X to Java?”>Assumption is that adding features is always good>Application

• Application competes on the basis of completeness• User cannot do X until application supports it• Features rarely interacts “intimately” with each other• Conclusion: more features are better

>Language• Languages (most) are Turing complete• Can always do X; question is how elegantly• Features often interact with each other• Conclusion: fewer, more regular features are better

Page 16: Java Future S Ritter

16

Adding X To Java > Must be compatible with existing code

• assert and enum keywords breaks old code> Must respect Java's abstract model

• Should we allowing padding/aligning object sizes?> Must leave room for future expansion

• Syntax/semantics of new feature should not conflict with syntax/semantics of existing and/or potential features

• Allow consistent evolution

Page 17: Java Future S Ritter

17

Changing Java Is Really Hard Work> Update the JSL> Implement it in the compiler> Add essential library support> Write test> Update the VM specs> Update the VM and class file tools> Update JNI> Update reflection APIs> Update serialization support> Update javadoc output

Page 18: Java Future S Ritter

18

Better Integer Literals> Binary literals

> With underscores

> Unsigned literals

int mask = 0b1010;

int bigMask = 0b1010_0101;long big = 9_223_783_036_967_937L;

byte b = 0xffu;

Page 19: Java Future S Ritter

19

Better Type Inference

Map<String, Integer> foo = new HashMap<String, Integer>();

Map<String, Integer> foo =new HashMap<>();

Page 20: Java Future S Ritter

20

Strings in Switch> Strings are constants too

String s = ...;switch (s) {

case "foo":return 1;

case "bar":Return 2;

default:return 0;

}

Page 21: Java Future S Ritter

21

Resource Management> Manually closing resources is tricky and tedious

public void copy(String src, String dest) throws IOException {InputStream in = new FileInputStream(src);try {

OutputStream out = new FileOutputStream(dest);try {

byte[] buf = new byte[8 * 1024];int n;while ((n = in.read(buf)) >= 0)

out.write(buf, 0, n);} finally {

out.close();}

} finally {in.close();

}}

Page 22: Java Future S Ritter

22

Automatic Resource Management

static void copy(String src, String dest) throws IOException { 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); }

//in and out closes }

Page 23: Java Future S Ritter

23

Index Syntax for Lists and Maps

List<String> list = Arrays.asList(new String[] {"a", "b", "c"});

String firstElement = list[0];

Map<Integer, String> map = new HashMap<>();map[Integer.valueOf(1)] = "One";

Page 24: Java Future S Ritter

24

DynamicDynamicLanguagesLanguages

SupportSupportDa Vinci Machine ProejctDa Vinci Machine Proejct

Page 25: Java Future S Ritter

25

Virtual Machines> A software implementation of a specific computer

architecture• Could be a real hardware (NES) or fictitious (z-machine)

> Popular in current deployments• VirtualBox, VMWare, VirtualPC, Parallels, etc

> “Every problem in computer science can be solved by adding a layer of indirection” – Butler Lampson• VM is the indirection layer • Abstraction from hardware• Provides portability

Page 26: Java Future S Ritter

26

VM Have Mostly Won the Day> Lots of languages today are targeting VM

• Writing native compiler is a lot of work> Why? Language need runtime support

• Memory management, reflection, security, concurrency controls, tools, libraries, etc

> VM based systems provides these• Some features are part of the VM

> Lots of VM for lots of different languages• JVM, CLR, Dalvik, Smalltalk, Perl, Python, YARV, Rubinius,

Tamarin, Valgrind (C++!), Lua, Postscript, Flash, p-code, Zend, etc

Page 27: Java Future S Ritter

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

Page 28: Java Future S Ritter

28

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

Page 29: Java Future S Ritter

29

Languages on the Java Virtual Machine

29

Clojure

Tcl

JavaScript

v-language

CAL

Sather

Funnel

MiniPLAN

Lisp

Scheme

Basic

Logo JHCR

TermWare

Drools

Prolog

LLP

JESS

Eiffel

Smalltalk

C#

G

GroovyNice

Anvil

Hojo

Correlate

Ada

Bex Script

Tea

PHP

Phobos Sleep

FScript

JudoScript

JRuby

ObjectScript

Jickle

Yoix

Simkin

BeanShell

DawnWebL

iScript

Jython

Pnuts

Yassl

Forth

PiccolaSALSA

Processing

Zigzag

Tiger

Tiger

IconPascal

Oberon

Modula-2

Luck

E

Rexx JavaFX ScriptScala

Page 30: Java Future S Ritter

30

Pain Points for Dynamic Languages> Method invocation

• Including linking and selection> New view points on Java types

• List versus LIST> Boxed values

• Integer versus fixnum> Special control structures

• Tailcall, generators, continuations, etc> What is the one change in the JVM that would make

life better for dynamic languages?• Flexible method calls!

Page 31: Java Future S Ritter

31

Method Invocation TodayString s = “Hello World”;System.out.println(s);

1: ldc #2 // Push String, s, onto stack 2: astore_1 // Pop string and store in local

3: getstatic #3 // Get static field java/lang/System.out:Ljava/io/PrintStream

4: aload_1 // Load string ref from local var5: invokevirtual #4; //Method java/io/PrintStream.println:

//(Ljava/lang/String;)V

> Receiver type must conform to the resolved type of the call site

> Call methods must always exist> Symbolic name is the name of an actual method> Four 'invoke' bytecode

• invokevirtual, invokeinterface, invokestatic, invokespecial

Page 32: Java Future S Ritter

32

Bootstrapping Method Handle

Page 33: Java Future S Ritter

33

invokedynamic Byte Code0: aload_11: aload_22: invokedynamic #3 //Name and type only lessThan:

//(Ljava/lang/Object;Ljava/lang/Object;)Z5: if_icmpeq

>

>

> >

pink thing = CallSite objectgreen thing = MethodHandle object

Call site reifies the call

Page 34: Java Future S Ritter

34

What Will Not Be in JDK7> Closures> Small Language changes that were proposed

• Improved exception handling (safe rethrow, multi-catch)• Elvis and other null-safe operators• Large arrays

> Other language features• Reified generic types• First class properties• Operator overloading

> JSR-295 Beans binding> JSR-277 Java Module System

Page 35: Java Future S Ritter

35

JavaFX> Develop Rich Internet Applications using Java> JavaFX scripting language

• Leverages Java platform: JVM, Class libraries• Simple integration of existing Java code

> Powerful language features• Binding• Effects• Animations

Page 36: Java Future S Ritter

36

Added in JavaFX 1.1> Official support for JavaFX Mobile

• Mobile Emulator > Language Improvements

• Addition of Java primitive types (float, double, long, int, short, byte, char)• Improved Language Reference Guide

> Performance and Stability Improvements• Desktop Runtime updated to improve performance and stability

> Additional Improvements• Better support for mobile/desktop apps using the same code-base• Improved “cross domain” access• Standard navigation method for cross-device content

Page 37: Java Future S Ritter

37

JavaFX 1.2: Released at JavaOne 2009> UI Control components

• Button, CheckBox, etc> UI Chart components

• LineChart, BubbleChart, BarChart, etc> Solaris and Linux supported!!!!

• GStreamer media support> RealTime Streaming Protocol (RTSP) support> Production suite now supports Adobe CS4

Page 38: Java Future S Ritter

38

Summary> Lots of new things coming

• Some not covered here • Includes annotations for Java type, Swing application

framework, JXLayer, date picker, etc.> Java on the client is alive and well> JavaFX becoming mature> Platform will be more robust and scalable> Coming soon in 2010

Page 39: Java Future S Ritter

39

39

Simon Ritter Technology Evangelist [email protected]

JDK7: What The Future Holds For Java