Slide 1

Slide 1 text

IntelliJ IDEA ©JetBrains. All rights reserved Life Beyond Java 8 Trisha Gee (@trisha_gee)
 Developer Advocate & Java Champion, JetBrains

Slide 2

Slide 2 text

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.

Slide 3

Slide 3 text

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”

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Releases, Updates, 
 Licensing & Support

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

We have two types of releases

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

$$$ $$$

Slide 11

Slide 11 text

$$$ $$$

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Use $free Oracle OpenJDK

Slide 14

Slide 14 text

Java 14

Slide 15

Slide 15 text

Use $free Oracle OpenJDK But upgrade every 6 months

Slide 16

Slide 16 text

Use an LTS version

Slide 17

Slide 17 text

Java 11

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

https://jdk.dev

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Why bother?

Slide 22

Slide 22 text

Java 11

Slide 23

Slide 23 text

(Current LTS release)

Slide 24

Slide 24 text

JShell

Slide 25

Slide 25 text

var

Slide 26

Slide 26 text

Convenience Factory Methods for Collections

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

New Methods on Stream API items.stream()
 .takeWhile(user !-> user.count() < maxCount)
 .forEach(user !-> position.incrementAndGet());


Slide 29

Slide 29 text

Predicate.not()

Slide 30

Slide 30 text

New Methods on Optional

Slide 31

Slide 31 text

Built in Http Client

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

Jigsaw

Slide 34

Slide 34 text

Java Module System

Slide 35

Slide 35 text

JLink

Slide 36

Slide 36 text

Java 14

Slide 37

Slide 37 text

(The latest version)

Slide 38

Slide 38 text

(for now!!...)

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

Java 15

Slide 44

Slide 44 text

JEP 378: Text Blocks (Standard)

Slide 45

Slide 45 text

JEP 375: Pattern Matching for instanceof (Second Preview)

Slide 46

Slide 46 text

• Non-private constructors • Annotations • Local Types JEP 384: Records (Second Preview)

Slide 47

Slide 47 text

JEP 360: Sealed Types (Preview)

Slide 48

Slide 48 text

JEP 371: Hidden Classes

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

The Future

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

The Business Doesn’t Care About Language Features

Slide 54

Slide 54 text

Performance

Slide 55

Slide 55 text

Use of Memory

Slide 56

Slide 56 text

• 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)

Slide 57

Slide 57 text

• 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)

Slide 58

Slide 58 text

Cost

Slide 59

Slide 59 text

Cost £$€

Slide 60

Slide 60 text

Tips for Migration

Slide 61

Slide 61 text

Run on updated JDK

Slide 62

Slide 62 text

Run on updated JDK It might “just work”

Slide 63

Slide 63 text

Address compiler warnings

Slide 64

Slide 64 text

Address compiler warnings …they are there for a reason

Slide 65

Slide 65 text

Update your dependencies

Slide 66

Slide 66 text

Update your dependencies And add new ones

Slide 67

Slide 67 text

Update your build tool

Slide 68

Slide 68 text

Update your build tool Updated Maven and Gradle required

Slide 69

Slide 69 text

Compile against updated JDK

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

In Summary

Slide 73

Slide 73 text

Modern Java Can Help You

Slide 74

Slide 74 text

Modern Java Can Help You Performance, cost, maintenance…

Slide 75

Slide 75 text

There are two upgrade options

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

Upgrade Now And Reduce Future Pain

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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