Slide 1

Slide 1 text

05.09.2018
 Nürnberg / Herbstcampus Java 10, 11, and beyond Michael Vitz https://pixabay.com/en/coffee-beans-blue-red-caffeine-1599262/ @michaelvitz #Herbstcampus

Slide 2

Slide 2 text

Michael Vitz
 Senior Consultant at INNOQ Deutschland GmbH • Build, run, and maintain JVM applications • JavaSPEKTRUM column owner • ❤ Clojure

Slide 3

Slide 3 text

www.innoq.com OFFICES Monheim Berlin Offenbach Munich Zurich FACTS ~125 employees Privately owned Vendor-independent SERVICES Strategy & technology consulting Digital business models Software architecture & development Digital platforms & infrastructures Knowledge transfer, coaching & trainings CLIENTS Finance Telecommunications Logistics E-commerce Fortune 500 SMBs Startups

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

public class Quiz1 { public static void main(String[] args) { final String[] array = {""}; array[generateArrayIndex()] += "a"; } static int generateArrayIndex() { System.out.println("Array Index Evaluated"); return 0; } } https://bugs.openjdk.java.net/browse/JDK-8204340 http://marxsoftware.blogspot.com/2018/06/JDK-8204322.html

Slide 6

Slide 6 text

JDK 10 https://pixabay.com/en/number-ad-yellow-color-asphalt-437928/

Slide 7

Slide 7 text

https://twitter.com/MarcusBiel/status/973502163199512576

Slide 8

Slide 8 text

• JEP314: Additional Unicode Language-Tag Extensions • JEP313: Remove the Native-Header Generation Tool • JEP296: Consolidate the JDK Forest into a Single Repository • JEP319: Root Certificates http://openjdk.java.net/jeps/314 http://openjdk.java.net/jeps/313 http://openjdk.java.net/jeps/296 http://openjdk.java.net/jeps/319

Slide 9

Slide 9 text

JEP322:Time-Based Release Versioning [1-9][0-9]*((\.0)*\.[1-9][0-9]*)* http://openjdk.java.net/jeps/322

Slide 10

Slide 10 text

• JEP316: Heap Allocation on Alternative Memory Devices • JEP304: Garbage-Collector Interface • JEP312: Thread-Local Handshakes http://openjdk.java.net/jeps/316 http://openjdk.java.net/jeps/304 http://openjdk.java.net/jeps/312

Slide 11

Slide 11 text

• JEP310: Application Class-Data Sharing • JEP317: Experimental Java-Based JIT Compiler • JEP307: Parallel Full GC for G1 http://openjdk.java.net/jeps/310 http://openjdk.java.net/jeps/317 http://openjdk.java.net/jeps/307

Slide 12

Slide 12 text

JEP286: Local-Variable Type Inference var Cheat Sheet: https://snyk.io/blog/local-type-inference-java-cheat-sheet/ Style Guidelines: http://openjdk.java.net/projects/amber/LVTIstyle.html http://openjdk.java.net/jeps/286

Slide 13

Slide 13 text

http://openjdk.java.net/projects/jdk/10/

Slide 14

Slide 14 text

More small enhancements • @summary • • List#copyOf, Map#copyOf, Set#copyOf • Collectors#toUnmodifiableList/Set/Map • Optional::orElseThrow https://bugs.openjdk.java.net/browse/JDK-8173425 https://bugs.openjdk.java.net/browse/JDK-8146115 https://bugs.openjdk.java.net/browse/JDK-8177290 https://bugs.openjdk.java.net/browse/JDK-8184690 https://bugs.openjdk.java.net/browse/JDK-8140281

Slide 15

Slide 15 text

JDK 11 https://pixabay.com/en/pool-balls-billiard-eleven-eight-1003955/

Slide 16

Slide 16 text

http://openjdk.java.net/projects/jdk/11/

Slide 17

Slide 17 text

http://openjdk.java.net/projects/jdk/11/

Slide 18

Slide 18 text

JEP327: Unicode 10 http://openjdk.java.net/jeps/327

Slide 19

Slide 19 text

JEP321: HTTP Client http://openjdk.java.net/jeps/321 HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://openjdk.java.net/")) .build(); client.sendAsync(request, asString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); http://openjdk.java.net/groups/net/httpclient/intro.html

Slide 20

Slide 20 text

JEP330: Launch Single-File Source-Code Programs http://openjdk.java.net/jeps/330 javac Foo.java \ && java Foo \ && rm Foo.class

Slide 21

Slide 21 text

java.io • java.io.FileReader(java.lang.String, java.nio.charset.Charset) • java.io.FileWriter(java.lang.String, java.nio.charset.Charset) • java.io.InputStream#nullInputStream • java.io.OutputStream#nullOutputStream • java.io.Reader#nullReader • java.io.Writer#nullWriter

Slide 22

Slide 22 text

java.lang.String • String::repeat(int) • String::lines • String::strip, String::stripLeading, String::stripTrailing • String::isBlank https://bugs.openjdk.java.net/browse/JDK-8197594 https://bugs.openjdk.java.net/browse/JDK-8200380 https://bugs.openjdk.java.net/browse/JDK-8200377 https://bugs.openjdk.java.net/browse/JDK-8200436

Slide 23

Slide 23 text

java.util.Optional/Stream/Predicate • Optional::isEmpty • Stream::toList • Predicate#not https://bugs.openjdk.java.net/browse/JDK-8184693 https://bugs.openjdk.java.net/browse/JDK-8180352 https://bugs.openjdk.java.net/browse/JDK-8050818

Slide 24

Slide 24 text

java.nio.file.Files/Path • Files#isSameContent • Files#readString, Files#writeString • Path#of(URI), Path#of(String, String…) https://bugs.openjdk.java.net/browse/JDK-8202302 https://bugs.openjdk.java.net/browse/JDK-8202055 https://bugs.openjdk.java.net/browse/JDK-8199485

Slide 25

Slide 25 text

java.lang.Character/CharSequence • Character#toString(int) • CharSequence#compare(CharSequence, CharSequence) https://bugs.openjdk.java.net/browse/JDK-8198837 https://bugs.openjdk.java.net/browse/JDK-8195867

Slide 26

Slide 26 text

java.util.regex.Pattern • Pattern::asMatchPredicate https://bugs.openjdk.java.net/browse/JDK-8201308

Slide 27

Slide 27 text

java.lang.Thread • Thread::stop(Throwable), Thread::destroy https://bugs.openjdk.java.net/browse/JDK-8204243

Slide 28

Slide 28 text

Future https://pixabay.com/en/binoculars-looking-man-discovery-1209011/

Slide 29

Slide 29 text

http://openjdk.java.net/projects/jdk/12/

Slide 30

Slide 30 text

Project Amber https://pixabay.com/en/heart-amber-pendant-necklace-1202129/

Slide 31

Slide 31 text

http://openjdk.java.net/projects/amber/

Slide 32

Slide 32 text

JEP326: Raw String Literals http://openjdk.java.net/jeps/326 String query = `` SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = 'INDIANAPOLIS' ORDER BY `EMP_ID`, `LAST_NAME`; ``;

Slide 33

Slide 33 text

JEP325: Switch Expressions http://openjdk.java.net/jeps/325 int numLetters = switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case THURSDAY, SATURDAY -> 8; case WEDNESDAY -> 9; case null -> 0; };

Slide 34

Slide 34 text

JEP302: Lambda Leftovers http://openjdk.java.net/jeps/302 BiFunction biss = (i, _) -> String.valueOf(i); Map msi = ... ... String key = computeSomeKey(); msi.computeIfAbsent(key, key -> key.length()) Optional: Better disambiguation for functional expression

Slide 35

Slide 35 text

JEP305: Pattern Matching http://openjdk.java.net/jeps/305 String formatted; switch (obj) { case Integer i: formatted = String.format("int %d", i); break; case Byte b: formatted = String.format("byte %d", b); break; case Long l: formatted = String.format("long %d", l); break; case Double d: formatted = String.format("double %f", l); break; case String s: formatted = String.format("String %s", s); break; default: formatted = obj.toString(); }

Slide 36

Slide 36 text

http://openjdk.java.net/projects/valhalla/

Slide 37

Slide 37 text

JEP 3: JDK Release Process http://openjdk.java.net/jeps/3

Slide 38

Slide 38 text

JEP 12: Preview Language and VM Features http://openjdk.java.net/jeps/12 @michaelvitz #Herbstcampus

Slide 39

Slide 39 text

JEP draft: Better hash codes http://openjdk.java.net/jeps/8201462 @michaelvitz #Herbstcampus

Slide 40

Slide 40 text

JEP draft: Timely Reducing Unused Committed Memory http://openjdk.java.net/jeps/8204089 @michaelvitz #Herbstcampus

Slide 41

Slide 41 text

JEP draft: Lazy Static Final Fields http://openjdk.java.net/jeps/8209964 @michaelvitz #Herbstcampus

Slide 42

Slide 42 text

Support

Slide 43

Slide 43 text

http://www.oracle.com/technetwork/java/eol-135779.html

Slide 44

Slide 44 text

http://www.oracle.com/technetwork/java/eol-135779.html

Slide 45

Slide 45 text

http://www.oracle.com/technetwork/java/eol-135779.html

Slide 46

Slide 46 text

http://www.oracle.com/technetwork/java/eol-135779.html

Slide 47

Slide 47 text

https://adoptopenjdk.net

Slide 48

Slide 48 text

http://www.oracle.com/technetwork/java/javaseproducts/overview/javasesubscriptionfaq-4891443.html

Slide 49

Slide 49 text

https://www.azul.com/products/zulu-and-zulu-enterprise/zulu-enterprise-java-support-options

Slide 50

Slide 50 text

public class Quiz2 { public static void main(String[] args) { Double doubleValue = false ? 1.0 : new HashMap().get("1"); System.out.println(“Value: " + doubleValue); } } http://marxsoftware.blogspot.com/2018/06/jdk8-jdk10-ternary-boxing-unboxing.html

Slide 51

Slide 51 text

www.innoq.com innoQ Deutschland GmbH Krischerstr. 100 40789 Monheim am Rhein Germany +49 2173 3366-0 Ohlauer Str. 43 10999 Berlin Germany +49 2173 3366-0 Ludwigstr. 180E 63067 Offenbach Germany +49 2173 3366-0 Kreuzstr. 16 80331 München Germany +49 2173 3366-0 innoQ Schweiz GmbH Gewerbestr. 11 CH-6330 Cham Switzerland +41 41 743 0116 Thanks! Questions? Michael Vitz [email protected] michaelvitz +49 151 19116015