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

Beyond Java 8 (2020)

Beyond Java 8 (2020)

Wasn’t Java 8 a fantastic update to the language? Lambdas and streams were a huge change and have helped to improve Java developers’ productivity and introduce some functional ideas to the language. Then came Java 9... and although the module system is really interesting for certain types of applications, the lack of exciting language features and uncertainty around how painful it might be to migrate to Java 9 left many applications taking a wait-and-see approach, happy with Java 8.

But now Java has a new version every six months, and suddenly Java 14 is here. We’re all still on Java 8, wondering whether we should move to a later version, which one to choose, and how painful it might be to upgrade.

In this presentation we look at:

- Why upgrade from Java 8, including language features from Java 9-14
- What sorts of issues might we run into if we do choose to upgrade
- How the support and license changes that came in with Java 11 might impact us

Trisha Gee

June 24, 2020
Tweet

More Decks by Trisha Gee

Other Decks in Technology

Transcript


  1. Trisha Gee (@trisha_gee)
    Developer & Technical Advocate, JetBrains
    Beyond Java 8

    View Slide

  2. https://www.jetbrains.com/lp/devecosystem-2020/java/
    Despite the emergence of newer
    versions, Java 8 is still most
    beloved. It is used by 3/4 of Java
    developers. Java 11 is growing
    more popular. Compared to last
    year, its usage has increased by
    10 percentage points.

    View Slide

  3. https://www.infoq.com/news/2020/03/new-relic-jvm-report/ https://blog.newrelic.com/technology/state-of-java/
    “The majority of JVMs (over 85%) are running on Java 8”

    View Slide

  4. View Slide

  5. Releases, Updates, 

    Licensing & Support

    View Slide

  6. View Slide

  7. We have two types of releases
    Releases and LTS (Long Term Support) releases

    View Slide

  8. View Slide

  9. $$$
    $$$

    View Slide

  10. https://flic.kr/p/8xhk74

    View Slide

  11. Use $free Oracle OpenJDK
    But upgrade 6 months

    View Slide

  12. Java 14

    View Slide

  13. Use an LTS version
    But you may have to pay to use it in production

    View Slide

  14. Java 11

    View Slide

  15. https://jdk.dev

    View Slide

  16. View Slide

  17. Why bother?

    View Slide

  18. Language features in Java 11
    (The current Long Term Support release)

    View Slide

  19. JShell

    View Slide

  20. var

    View Slide

  21. Convenience Factory Methods for
    Collections

    View Slide

  22. Collecting to Unmodifable Collections
    items.stream()

    .filter(Objects!::nonNull)

    .map(Object!::toString)

    .collect(Collectors.toUnmodifiableList());

    View Slide

  23. New Methods on Stream API
    items.stream()

    .takeWhile(user !-> user.count() < maxCount)

    .forEach(user !-> position.incrementAndGet());


    View Slide

  24. Predicate.not()

    View Slide

  25. New Methods on Optional

    View Slide

  26. Built in Http Client

    View Slide

  27. • https://blog.jetbrains.com/idea/2017/10/creating-
    multi-release-jar-files-in-intellij-idea/
    Multi Release Jar Files

    View Slide

  28. Jigsaw

    View Slide

  29. Java Module System

    View Slide

  30. JLink

    View Slide

  31. Language features in Java 14
    (The latest version of Java)

    View Slide

  32. https://blog.jetbrains.com/idea/2019/02/java-12-and-intellij-idea/
    Switch Expressions

    View Slide

  33. https://blog.jetbrains.com/idea/2019/11/java-13-and-intellij-idea
    Text Blocks (Preview)

    View Slide

  34. https://blog.jetbrains.com/idea/2020/03/java-14-and-intellij-idea
    Records (Preview)

    View Slide

  35. https://blog.jetbrains.com/idea/2020/03/java-14-and-intellij-idea/
    Pattern Matching for instanceof (Preview)

    View Slide

  36. Beyond Java 14

    View Slide

  37. • JEP 378: Text Blocks (Standard)
    • JEP 375: Pattern Matching for instanceof (Second Preview)
    • JEP 384: Records (Second Preview)
    • JEP 360: Sealed Types (Preview)
    • JEP 371: Hidden Classes
    • JEP 377: ZGC: A Scalable Low-Latency Garbage Collector
    (Production)
    • https://openjdk.java.net/projects/jdk/15/
    Java 15

    View Slide

  38. • Project Amber
    • Valhalla
    • Loom
    • More Garbage Collection improvements
    • Proposed New Project: Leyden
    And in the future?

    View Slide

  39. The Business Doesn’t Care
    About Language Features

    View Slide

  40. Performance

    View Slide

  41. Use of Memory

    View Slide

  42. • Java 9: JEP 248: G1 the Default GC
    • Java 10: JEP 307: Parallel Full GC for G1
    • Java 11: JEP 318: Epsilon (Experimental)
    • Java 11: JEP 333: ZGC (Experimental)
    Garbage Collection (Java 11)

    View Slide

  43. • Java 12: Shenandoah (Experimental)
    • Java 12: More Updates to G1
    • Java 12: More Improvements to ZGC
    • Java 13: ZGC: Uncommit Unused Memory
    • Java 14: ZGC on macOS and Windows
    • Java 14: Deprecate the ParallelScavenge +
    SerialOld GC Combination
    Garbage Collection (Java 14)

    View Slide

  44. Cost
    £$€

    View Slide

  45. Tips for Migration

    View Slide

  46. Run on updated JDK
    It might “just work”

    View Slide

  47. Address compiler warnings
    …they are there for a reason

    View Slide

  48. Update your dependencies
    And add new ones

    View Slide

  49. Update your build tool
    Updated Maven and Gradle required

    View Slide

  50. Compile against updated JDK
    …and start using the shiny new features

    View Slide

  51. https://www.infoq.com/articles/upgrading-java-8-to-12/

    View Slide

  52. In Summary

    View Slide

  53. Java Is Changing
    …fast

    View Slide

  54. Modern Java Can Help You
    Performance, cost, maintenance…

    View Slide

  55. There are two upgrade options
    To Java 11 (LTS) or to Java 14 (upgrade every 6 months)

    View Slide

  56. Upgrade Now And Reduce Future
    Pain
    …and keep upgrading, at least in CI

    View Slide

  57. http://bit.ly/beyond-j8
    @trisha_gee

    View Slide