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
Tweet

More Decks by Rodrigo Graciano

Other Decks in Programming

Transcript

  1. @rodrigograciano
    Java 9 to Java 16: A review of
    recent changes to the language
    Rodrigo Graciano
    speakerdeck.com/graciano

    View Slide

  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/

    View Slide

  3. @rodrigograciano
    Release Schedule 8

    View Slide

  4. @rodrigograciano
    About me
    u Professional with 10+ years
    u Principal Software Engineer - NY
    u NYJavaSIG Leader
    u graciano.dev
    u Twitter: @rodrigograciano

    View Slide

  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

    View Slide

  6. @rodrigograciano
    Java 9
    9
    September 2017
    Initially scheduled to September 2016
    - delayed
    3 years after Java 8
    Huge number of changes – 100+

    View Slide

  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

    View Slide

  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

    View Slide

  9. @rodrigograciano
    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

    View Slide

  10. @rodrigograciano
    JShell 9
    u Easy to use
    u Useful to teach Java
    language
    u Read-Eval-Print-Loop

    View Slide

  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

    View Slide

  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

    View Slide

  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();
    //MapObject>()
    Must be
    initialized – var
    age; //Not valid
    var var = “var”;

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  17. @rodrigograciano
    Others
    11
    u Flight Recorder
    u Single file source code
    programs

    View Slide

  18. @rodrigograciano
    Java 12
    12
    March 2019
    Feature Release
    Preview Features
    Small Release - 8 JEP's

    View Slide

  19. @rodrigograciano
    Switch Expressions 12

    View Slide

  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

    View Slide

  21. @rodrigograciano
    Java 13
    13
    September 2019
    Feature Release
    Preview Features
    Just 5 JEP's

    View Slide

  22. @rodrigograciano
    Text Blocks 13
    u Before Text Blocks u With Text Blocks

    View Slide

  23. @rodrigograciano
    Others
    u Switch Expression – 2nd preview
    u Improvements to ZGC
    u Dynamic CDS archives
    u Reimplement the Legacy Socket API
    13

    View Slide

  24. @rodrigograciano
    Java 14
    14
    March 2020
    Feature Release
    Preview and Final Features
    16 JEP's

    View Slide

  25. @rodrigograciano
    Records 14

    View Slide

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

    View Slide

  27. @rodrigograciano
    Records (3) 14

    View Slide

  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

    View Slide

  29. @rodrigograciano
    Pattern Matching for instanceOf
    u Don’t need to explicitly cast after the instanceOf
    if (p instanceOf People people) {
    people.getName();
    }
    14

    View Slide

  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

    View Slide

  31. @rodrigograciano
    Java 15
    15
    September 2020
    Feature Release
    Preview and Final Features
    14 JEP's

    View Slide

  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

    View Slide

  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

    View Slide

  34. @rodrigograciano
    Java 16
    16
    March 2021
    Feature Release
    17 JEP’s

    View Slide

  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

    View Slide

  36. @rodrigograciano
    Java 17
    17
    September 2021
    LT Release
    13 JEP’s so far

    View Slide

  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

    View Slide

  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/

    View Slide

  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

    View Slide

  40. @rodrigograciano
    Java 18?
    u Yes, EA builds are already available

    View Slide

  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

    View Slide

  42. @rodrigograciano
    End
    u graciano.dev
    u Twitter: @rodrigograciano

    View Slide