Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KnoxJava - Java 9-17

KnoxJava - Java 9-17

In a recent survey, 85% of developers are still using Java 8 or older. When Java 8 was released in 2014, changes would come in large quantities at each release. But when the release cadence changed to every six months, many developers could not follow the changes to the language. This presentation will cover the main changes to each version after Java 8, including Variable Type Inference (var), Records, Switch expressions, Text Blocks, Sealed Classes, Hidden Classes, Pattern Matching, etc.

Rodrigo Graciano

June 15, 2021

More Decks by Rodrigo Graciano

Other Decks in Programming


  1. @rodrigograciano Java 9 to Java 16: A review of recent

    changes to the language Rodrigo Graciano speakerdeck.com/graciano
  2. @rodrigograciano 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/
  3. @rodrigograciano About me u Professional with 10+ years u Principal

    Software Engineer - NY u NYJavaSIG Leader u graciano.dev u Twitter: @rodrigograciano
  4. @rodrigograciano What we’ll see today? Main changes after Java 8

    Not all? 8 versions – Java 16 – March 2021 100+ JEP’s on Java 9 alone
  5. @rodrigograciano Java 9 9 September 2017 Initially scheduled to September

    2016 - delayed 3 years after Java 8 Huge number of changes – 100+
  6. @rodrigograciano 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
  7. @rodrigograciano 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
  8. @rodrigograciano Collections – Factory Methods u Reduce the “boilerplate” u

    Return Immutable collections u List<Integer> numbers = List.of(1,2,3); u Set<String> cities = Set.of(”New York City", ”Boston”); u Map<String, Integer> m2 = Map.ofEntries( Map.entry("A",1), Map.entry("B",2) ); 9
  9. @rodrigograciano JShell 9 u Easy to use u Useful to

    teach Java language u Read-Eval-Print-Loop
  10. @rodrigograciano 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
  11. @rodrigograciano Java 10 10 March 2018 First release using the

    new release cadency – Every 6 months Feature Release – It’s not LTS 12 JEP’s
  12. @rodrigograciano 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(); //Map<Object, Object>() Must be initialized – var age; //Not valid var var = “var”;
  13. @rodrigograciano 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
  14. @rodrigograciano 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
  15. @rodrigograciano 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
  16. @rodrigograciano 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
  17. @rodrigograciano Others u Switch Expression – 2nd preview u Improvements

    to ZGC u Dynamic CDS archives u Reimplement the Legacy Socket API 13
  18. @rodrigograciano 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
  19. @rodrigograciano Pattern Matching for instanceOf u Don’t need to explicitly

    cast after the instanceOf if (p instanceOf People people) { people.getName(); } 14
  20. @rodrigograciano 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
  21. @rodrigograciano Sealed Classes u Permits to control who can extends/implements

    a class/interface public abstract sealed class Shape permits Circle, Square, Triangle {…} 15
  22. @rodrigograciano 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
  23. @rodrigograciano 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
  24. @rodrigograciano 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
  25. @rodrigograciano What’s about Loom? u Light weighed threads – Fibers

    u Not mapped 1:1 to OS u Development happening on separate branch u No ETA u EA builds based on Java 17 u https://jdk.java.net/loom/
  26. @rodrigograciano More about GC? u Chandra Guntur u https://c-guntur.github.io/java-gc/ u

    https://speakerdeck.com/cguntur/java-garbage- collection-basics u Monica Beckwith u https://www.youtube.com/watch?v=kR8_r3kMK-Y
  27. @rodrigograciano 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