$30 off During Our Annual Pro Sale. View Details »

Life Beyond Java 8

Trisha Gee
December 03, 2020

Life Beyond Java 8

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 15 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 session we’ll look at:

- Why upgrade from Java 8, including language features from Java 9-15
- 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

December 03, 2020
Tweet

More Decks by Trisha Gee

Other Decks in Programming

Transcript

  1. IntelliJ IDEA
    ©JetBrains. All rights reserved
    Life Beyond Java 8
    Trisha Gee (@trisha_gee)
    Java Developer Advocacy Lead, JetBrains

    View Slide

  2. https://blog.jetbrains.com/idea/2020/09/a-picture-of-java-in-2020/
    Java 8 remains the most popular version. It is used by 75% of professional
    developers who use Java as their primary language.

    View Slide

  3. https://www.infoq.com/news/2020/03/new-relic-jvm-report/ https://snyk.io/wp-content/uploads/jvm_2020.pdf
    “The majority of JVMs (over 85%) are running on Java 8”

    View Slide

  4. Releases, Updates,
    Licensing & Support

    View Slide

  5. View Slide

  6. We have two types of releases

    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. $$$
    $$$

    View Slide

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

    View Slide

  12. Java 11
    Long Term Support (LTS) Release; ~3 years support

    View Slide

  13. Java 15
    Current release; be prepared to upgrade in March 2021

    View Slide

  14. https://jdk.dev

    View Slide

  15. IntelliJ IDEA can
    help you

    View Slide

  16. View Slide

  17. Why bother?

    View Slide

  18. Java 11

    Long Term Support (LTS) 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. Java 15

    Current Release

    View Slide

  32. Switch Expressions

    View Slide

  33. Switch Expressions
    https://jb.gg/ij-jdk12

    View Slide

  34. Text Blocks

    View Slide

  35. Text Blocks
    https://jb.gg/ij-jdk13

    View Slide

  36. Hidden classes

    View Slide

  37. Hidden classes
    JEP 371

    View Slide

  38. A Scalable Low-Latency Garbage Collector

    View Slide

  39. A Scalable Low-Latency Garbage Collector
    JEP 377

    View Slide

  40. Preview Features

    View Slide

  41. Pattern Matching for instanceof

    View Slide

  42. Pattern Matching for instanceof
    https://jb.gg/ij-jdk14

    View Slide

  43. Records

    View Slide

  44. Records
    https://jb.gg/ij-jdk14

    View Slide

  45. Sealed Types

    View Slide

  46. Sealed Types
    https://jb.gg/ij-jdk15

    View Slide

  47. https://openjdk.java.net/projects/jdk/15/

    View Slide

  48. The Future

    View Slide

  49. • JEP 302: Lambda Leftovers (including underscore for
    param)
    • JEP 360: Sealed Types (Preview)
    • JEP draft: Pattern matching for switch (Preview)
    • Project Amber
    • Valhalla
    • Loom
    • Lots of Garbage Collection improvements
    Java 16

    View Slide

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

    View Slide

  51. The Business
    Doesn’t Care About
    Language Features

    View Slide

  52. Performance

    View Slide

  53. Use of Memory

    View Slide

  54. • 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

  55. • Java 12: More Updates to G1
    • Java 14: Deprecate the ParallelScavenge +
    SerialOld GC Combination
    • Java 15: ZGC (Production)
    • Java 15: Shenandoah (Production)
    Garbage Collection (Java 15)

    View Slide

  56. Cost

    View Slide

  57. Cost
    £$€

    View Slide

  58. Tips for Migration

    View Slide

  59. Run on updated JDK

    View Slide

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

    View Slide

  61. Address compiler warnings

    View Slide

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

    View Slide

  63. Update your dependencies

    View Slide

  64. Update your dependencies
    And add new ones

    View Slide

  65. Update your build tool

    View Slide

  66. Update your build tool
    Updated Maven and Gradle required

    View Slide

  67. Compile against updated JDK

    View Slide

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

    View Slide

  69. https://bit.ly/8-to-11

    View Slide

  70. In Summary

    View Slide

  71. Modern Java Can Help You

    View Slide

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

    View Slide

  73. There are two upgrade options

    View Slide

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

    View Slide

  75. Upgrade Now And Reduce Future
    Pain

    View Slide

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

    View Slide

  77. https://bit.ly/love-beyond-8
    @trisha_gee

    View Slide