upgrading past java 9 sounds scary - qcon london 2020...•java 9: jep 248: g1 the default gc...

71

Upload: others

Post on 23-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 2: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Upgrading Past Java 9 Sounds Scary…and I don’t want to pay for Java

Page 3: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Super happy with Java 8, thanks

Page 4: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 5: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 6: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 7: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 8: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 9: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 10: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 11: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 12: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Starting with Java 11, Oracle will provide JDK releases under the open source GNU General Public License v2, with the Classpath Exception (GPLv2+CPE), and under a commercial license for those using the Oracle JDK as part of an Oracle product or service, or who do not wish to use open source software. This… replaces the historical “BCL” license, which had a combination of free and paid commercial terms.

Donald Smith, Sr. Director of Product Management (June 2018)

https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-

for-java-11-and-later

Page 13: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

That sounds frightening, and overly complicated. Talk us through it.

The Lego Batman Movie

Page 14: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

That sounds frightening, and overly complicated. Talk us through it.

The Lego Batman Movie

Page 15: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

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

Page 16: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

From Java 11 forward, Oracle JDK builds and OpenJDK builds will be essentially identical.

Donald Smith, Sr. Director of Product Management (Sept 2018)

https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-

for-java-11-and-later

Page 17: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

https://blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html

Page 18: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 19: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 20: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

https://adoptopenjdk.net

Page 21: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

https://adoptopenjdk.net/support.html

Page 22: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 23: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Language features

Page 24: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

JShell

Page 25: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

JShell

Page 26: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

JShell

Page 27: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

var

Page 28: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

var

Page 29: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

var

Page 30: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

var

Page 31: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

var

Page 32: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

var

Page 33: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Convenience Factory Methods for Collections

Page 34: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Convenience Factory Methods for Collections

Page 35: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Convenience Factory Methods for Collections

Page 36: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Convenience Factory Methods for Collections

Page 37: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Collecting to Unmodifable Collections

items.stream().filter(Objects::nonNull).map(Object::toString).collect(Collectors.toUnmodifiableList());

Page 38: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

New Methods on Stream API

items.stream().takeWhile(user -> user.count() < maxCount).forEach(user -> position.incrementAndGet());

Page 39: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Predicate.not()

Page 40: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

New Methods on Optional

Page 41: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Http Client

@tddmonkey

Page 42: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Multi Release Jar Files

Page 43: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Jigsaw

Page 44: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Java Module System

Page 45: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Java Module System

Page 46: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

JLink

Page 47: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

And in the future?

Page 49: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

• JEP 302: Lambda Leftovers (including underscore for param)

• JEP 305: Pattern Matching (Preview)

• Data Classes for Java

• Project Amber

• Valhalla

• Loom

And in the future?

Page 50: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 51: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Performance

Page 52: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Memory Usage

Page 53: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

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

Page 54: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

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

• Java 12: JEP 189: Shenandoah (Experimental)

• Java 12: More Updates to G1

• Java 12: More Improvements to ZGC

Garbage Collectors

Page 55: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Cost

£$€

Page 56: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Catch the 6 month release train

Page 57: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

If It Hurts, Do It More Frequently, and Bring the Pain Forward

An idea from Extreme Programming (XP)

Continuous Delivery – Jez Humble & Dave Farley

Page 58: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 59: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Modularity?

Page 60: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Missing classes / methods

Page 61: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 62: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Run on updated JDK

It might “just work”

Page 63: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Address compiler warnings

…they are there for a reason

Page 64: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Update your dependencies

And add new ones

Page 65: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Update your build tool

Maven and Gradle work with Java 12

Page 66: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Compile against updated JDK

…and start using the shiny new features

Page 67: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)
Page 68: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Java Is Changing

…fast

Page 69: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Modern Java Can Help You

Performance, cost, maintenance…

Page 70: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)

Upgrade Now And Reduce Future Pain

…and keep upgrading, at least in CI

Page 71: Upgrading Past Java 9 Sounds Scary - QCon London 2020...•Java 9: JEP 248: G1 the Default GC •Java 10: JEP 307: Parallel Full GC for G1 •Java 11: JEP 318: Epsilon (Experimental)