@rodrigograciano @nehasardana09 Did you know? uJava 8 released in March 2014 u85% still uses 8 or older version * uAnyone using Java 9+ in PROD? u https://www.jetbrains.com/lp/devecosystem-2020/java/
@rodrigograciano @nehasardana09 About me u Professional with 10+ years u Principal Software Engineer - NY u NYJavaSIG Leader u graciano.dev u Twitter: @rodrigograciano
@rodrigograciano @nehasardana09 About me u Software Developer with 10+ years experience u Senior Specialist Developer – NY u JUG Leader, Garden State JUG (gsjug.org) u Twitter: @nehasardana09
@rodrigograciano @nehasardana09 Java 9 9 September 2017 Initially scheduled to September 2016 - delayed 3 years after Java 8 Huge number of changes – 100+
@rodrigograciano @nehasardana09 Jigsaw - JPMS u Scheduled to Java 7 u 11 Java Enhancement Proposals (JEP’s) u Aims to reduce packages size u Split the JDK in parts – Modules u More control over packages u Eliminates the “Jar Hell” u Main module (Root) is java.base u It’s Java – 100% backwards compatible 9
@rodrigograciano @nehasardana09 Garbage First Collector - G1 u Default choice starting at Java 9 u Substitute Concurrent Mark Swap (CMS) – Stop the world u Smaller pause time u Memory is split in regions - 1-32MB u Goal is to have 2048 regions (Heap) 9
@rodrigograciano @nehasardana09 Collections – Factory Methods u Reduce the “boilerplate” u Return Immutable collections u List numbers = List.of(1,2,3); u Set cities = Set.of(”New York City", ”Boston”); u Map m2 = Map.ofEntries( Map.entry("A",1), Map.entry("B",2) ); 9
@rodrigograciano @nehasardana09 Others u Interfaces can now have private methods (static and non-static) u Reactive Streams API u Improvements to Optional, try-with resources, streams and Javadoc (HTML 5) u HTTP2 9
@rodrigograciano @nehasardana09 Java 10 10 March 2018 First release using the new release cadency – Every 6 months Feature Release – It’s not LTS 12 JEP’s
@rodrigograciano @nehasardana09 Local Variable Type Inference (var) 10 var is a variable type Cannot be a class attribute No relation with var/val from Scala/Kotlin String name = “Java”; var name = “Java”; var myMap = new HashMap(); //MapObject>() Must be initialized – var age; //Not valid var var = “var”;
@rodrigograciano @nehasardana09 Others u Experimental JIT Compiler – Graal Ahead-of-Time (AOT) u Parallel G1 GC to improve full GC performance u AppCDS to improve start-up time u New API’s to create collections u List.copyOf(), Set.copyOf(), and Map.copyOf() u Stream API can collect data in an immutable collection u toUnmodifiableList(), toUnmodifiableSet(), and toUnmodifiableMap() 10
@rodrigograciano @nehasardana09 Java 11 11 September 2018 LTS – Next LTS will be Java 17 Java EE -> Jakarta EE Java EE source code was separated from the repository
@rodrigograciano @nehasardana09 GC’s u Epsilon GC – no-op collector. Perfect for benchmarking u Z GC – Experimental low-latency uWorks with all sizes of heaps – From small to Terabytes uPause time must not exceed 10ms 11
@rodrigograciano @nehasardana09 Others u Shenandoah GC – Constant pause time - Experimental u Microbenchmark Suite - based on JMH u Default CDS Archives – Enhance JDK process to generate a CDS archive u Enhance to G1. Automatically return Java heap memory to the operating system when idle 12
@rodrigograciano @nehasardana09 Others u Switch Expression – 2nd preview u Improvements to ZGC u Dynamic CDS archives u Reimplement the Legacy Socket API 13
@rodrigograciano @nehasardana09 Helpful NPE u Clearer NPE messages u Possible to know which object is null list.get(0).getName().trim(); u Where’s the null object? The list? Name? Cannot invoke "String.trim()" because the return value of "dev.graciano.Person.getName()" is null 14
@rodrigograciano @nehasardana09 Pattern Matching for instanceOf u Don’t need to explicitly cast after the instanceOf if (p instanceOf People people) { people.getName(); } 14
@rodrigograciano @nehasardana09 Others u JFR Streaming u Switch Expression – Final version u Text Blocks – 2nd Preview u ZGC on Windows and MacOS u Remove Concurrent Market Sweep GC (CMS) 14
@rodrigograciano @nehasardana09 Sealed Classes u Permits to control who can extends/implements a class/interface public abstract sealed class Shape permits Circle, Square, Triangle {…} 15
@rodrigograciano @nehasardana09 Others u ZGC and Shenandoah not experimental anymore u Text Blocks not a Preview Feature u Hidden classes u 2nd Preview of Records u 2nd Preview of Pattern Matching for instanceOf 15
@rodrigograciano @nehasardana09 What’s new? 16 u OpenJDK migrated from Mercurial to Git (GitHub) u Enhance the ZGC u Vector API u Final version of Records u Final version of Pattern Matching for instanceOf u 2nd Preview of Sealed Classes u Strongly Encapsulated JDK Internals
@rodrigograciano @nehasardana09 What’s new? 17 u Sealed Classes u Remove Experimental AOT & JIT Compiler u Vector API (2nd Incubator) u Pattern Matching for switch (Preview) u Strongly Encapsulated JDK Internals u Deprecate Security Manager for Removal u Enhanced Pseudo-Random Number Generators
@rodrigograciano @nehasardana09 More from Java 10/11 import java.nio.charset.*; public class Unicode { public static void main(String... args) { System.out.print(”Have a \uD83C\uDF7A"); System.out.println(" or a \uD83E\uDD64 "); } } 10/11 Slide extracted from https://speakerdeck.com/boyarsky