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 Release Schedule 8

  4. @rodrigograciano About me u Professional with 10+ years u Principal

    Software Engineer - NY u NYJavaSIG Leader u graciano.dev u Twitter: @rodrigograciano
  5. @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
  6. @rodrigograciano Java 9 9 September 2017 Initially scheduled to September

    2016 - delayed 3 years after Java 8 Huge number of changes – 100+
  7. @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
  8. @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
  9. @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
  10. @rodrigograciano JShell 9 u Easy to use u Useful to

    teach Java language u Read-Eval-Print-Loop
  11. @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
  12. @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
  13. @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”;
  14. @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
  15. @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
  16. @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
  17. @rodrigograciano Others 11 u Flight Recorder u Single file source

    code programs
  18. @rodrigograciano Java 12 12 March 2019 Feature Release Preview Features

    Small Release - 8 JEP's
  19. @rodrigograciano Switch Expressions 12

  20. @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
  21. @rodrigograciano Java 13 13 September 2019 Feature Release Preview Features

    Just 5 JEP's
  22. @rodrigograciano Text Blocks 13 u Before Text Blocks u With

    Text Blocks
  23. @rodrigograciano Others u Switch Expression – 2nd preview u Improvements

    to ZGC u Dynamic CDS archives u Reimplement the Legacy Socket API 13
  24. @rodrigograciano Java 14 14 March 2020 Feature Release Preview and

    Final Features 16 JEP's
  25. @rodrigograciano Records 14

  26. @rodrigograciano Records (2) u Immutable u Reduce the boilerplate 14

  27. @rodrigograciano Records (3) 14

  28. @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
  29. @rodrigograciano Pattern Matching for instanceOf u Don’t need to explicitly

    cast after the instanceOf if (p instanceOf People people) { people.getName(); } 14
  30. @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
  31. @rodrigograciano Java 15 15 September 2020 Feature Release Preview and

    Final Features 14 JEP's
  32. @rodrigograciano Sealed Classes u Permits to control who can extends/implements

    a class/interface public abstract sealed class Shape permits Circle, Square, Triangle {…} 15
  33. @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
  34. @rodrigograciano Java 16 16 March 2021 Feature Release 17 JEP’s

  35. @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
  36. @rodrigograciano Java 17 17 September 2021 LT Release 13 JEP’s

    so far
  37. @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
  38. @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/
  39. @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
  40. @rodrigograciano Java 18? u Yes, EA builds are already available

  41. @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
  42. @rodrigograciano End u graciano.dev u Twitter: @rodrigograciano