Life Beyond Java 8 (July 2020)

Life Beyond Java 8 (July 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 session we’ll 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.

3d6ace9554821d552146413bcdf874f6?s=128

Trisha Gee

July 10, 2020
Tweet

Transcript

  1. IntelliJ IDEA ©JetBrains. All rights reserved Life Beyond Java 8

    Trisha Gee (@trisha_gee)
 Developer Advocate & Java Champion, JetBrains
  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.
  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”
  4. None
  5. Releases, Updates, 
 Licensing & Support

  6. None
  7. We have two types of releases

  8. We have two types of releases Releases and LTS (Long

    Term Support) releases
  9. None
  10. $$$ $$$

  11. $$$ $$$

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

  13. Use $free Oracle OpenJDK

  14. Java 14

  15. Use $free Oracle OpenJDK But upgrade every 6 months

  16. Use an LTS version

  17. Java 11

  18. Use an LTS version But you may have to pay

    to use it in production
  19. https://jdk.dev

  20. None
  21. Why bother?

  22. Java 11

  23. (Current LTS release)

  24. JShell

  25. var

  26. Convenience Factory Methods for Collections

  27. Collecting to Unmodifable Collections items.stream()
 .filter(Objects!::nonNull) .map(Object!::toString) .collect(Collectors.toUnmodifiableList());

  28. New Methods on Stream API items.stream()
 .takeWhile(user !-> user.count() <

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

  29. Predicate.not()

  30. New Methods on Optional

  31. Built in Http Client

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

  33. Jigsaw

  34. Java Module System

  35. JLink

  36. Java 14

  37. (The latest version)

  38. (for now!!...)

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

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

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

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

  43. Java 15

  44. JEP 378: Text Blocks (Standard)

  45. JEP 375: Pattern Matching for instanceof (Second Preview)

  46. • Non-private constructors • Annotations • Local Types JEP 384:

    Records (Second Preview)
  47. JEP 360: Sealed Types (Preview)

  48. JEP 371: Hidden Classes

  49. JEP 377: ZGC: A Scalable Low-Latency Garbage Collector (Production)

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

  51. The Future

  52. • Project Amber • Valhalla • Loom • More Garbage

    Collection improvements • Proposed New Project: Leyden And in the future?
  53. The Business Doesn’t Care About Language Features

  54. Performance

  55. Use of Memory

  56. • 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)
  57. • 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)
  58. Cost

  59. Cost £$€

  60. Tips for Migration

  61. Run on updated JDK

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

  63. Address compiler warnings

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

  65. Update your dependencies

  66. Update your dependencies And add new ones

  67. Update your build tool

  68. Update your build tool Updated Maven and Gradle required

  69. Compile against updated JDK

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

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

  72. In Summary

  73. Modern Java Can Help You

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

  75. There are two upgrade options

  76. There are two upgrade options To Java 11 (LTS) or

    to Java 14 (upgrade every 6 months)
  77. Upgrade Now And Reduce Future Pain

  78. Upgrade Now And Reduce Future Pain …and keep upgrading, at

    least in CI
  79. http://bit.ly/beyond-j8 @trisha_gee