@jeanneboyarsky
Jeanne Boyarsky
Wednesday, October 24, 2018
Oracle Code One – DEV5125
Which Java Version from which Vendor
with what Support?
speakerdeck.com/boyarsky
Slide 2
Slide 2 text
@jeanneboyarsky
Martijn Verberg (JClarity)
Simon Ritter (Azul)
Steve Poole & Tim Ellison (IBM)
Simon Maple (LJC)
Trisha Gee
??? (Red Hat)
Thank you to…
Slide 3
Slide 3 text
@jeanneboyarsky
So much
changed
since Java 9
& Jigsaw’s
release!
3
Slide 4
Slide 4 text
@jeanneboyarsky 4
Slide 5
Slide 5 text
@jeanneboyarsky
For more on Java 9 (or
10 or 11), see:
https://speakerdeck.com/
boyarsky
5
@jeanneboyarsky
Wait, a major version every 6 months?
• + Syntax changes
• + Smaller features
• - Years of features
JDK 10 JDK 11
12 new
features
15 new
features
14
Slide 15
Slide 15 text
@jeanneboyarsky
Java School
Report Card
Developer
Community
à A
Features
à B
Frequency of
Release
à F
Predictability
of Release
à D
15
Slide 16
Slide 16 text
@jeanneboyarsky
JVM College
Report Card
Vocabulary
à B
Polyglot
programming
à A
Frequency of
Release
à F
Predictability
of Release
à D
16
Slide 17
Slide 17 text
@jeanneboyarsky
Re-org at
the train
station
17
Slide 18
Slide 18 text
@jeanneboyarsky
How many languages do you know?
q One (or zero)
q Two – Five
q Six or more
Examples
• Java
• Kotlin
• Groovy
• Scala
• SQL
• HTML
• JavaScript
• CSS
18
Slide 19
Slide 19 text
@jeanneboyarsky
Before Now
19
Slide 20
Slide 20 text
@jeanneboyarsky
Before Now
20
Slide 21
Slide 21 text
@jeanneboyarsky
Before Now
Releases
every
Varies 6 months
(or 3 years
LTS)
Releases are Feature
driven
Date driven
Oracle/OpenJDK Communications
Slide 22
Slide 22 text
@jeanneboyarsky
Patches Ask vendor a
question
What is Long Term Support?
Oracle defined as 3 years. Other
vendors (mostly) following definition.
Slide 23
Slide 23 text
@jeanneboyarsky
More time to
code while I wait
for the next train!
23
Slide 24
Slide 24 text
@jeanneboyarsky
Oracle/OpenJDK
Arrivals Train Schedule
Java Release Date Long Term
Support
9 September 21, 2017
10 March 20, 2018
11 September 25, 2018
24
Slide 25
Slide 25 text
@jeanneboyarsky
Oracle Security Patches Departure
Schedule
Java Public Patches Paid Patches
6 2013 Late 2018
7 2015 2022
8 January 2019 (business)
December 2020 (public)
2025
25
Slide 26
Slide 26 text
@jeanneboyarsky
Oracle/OpenJDK
Security Patches Departure Schedule
Java Public patches Paid patches
9 March 2018 n/a
10 September 2018 n/a
11 March 2019 2023-2028
26
Slide 27
Slide 27 text
@jeanneboyarsky
Looking at that another way
Once Java 12 comes out, what does
Oracle issue patches for?
Open JDK 12
Oracle Java 11 (Paid)
27
Slide 28
Slide 28 text
@jeanneboyarsky
Wait. So what happens next?
How long will Java 12 have Oracle patches?
Answer: 6 months
What is the next LTS version
after Java 11?
Java 11 + 3*2 = 17
28
Slide 29
Slide 29 text
@jeanneboyarsky
A Tale of Two JDKs
Java Oracle JDK Open JDK
New Version Every 3 years Every 6 months
Cost Paid Free
Upgrade Options • Security patch
• Next version
• OpenJDK
• Interim
security patch
• Next version
29
Note: Oracle also publishes Open JDK 6 months for dev; not EA
Slide 30
Slide 30 text
@jeanneboyarsky
Converged Binaries
30
Slide 31
Slide 31 text
@jeanneboyarsky
Found it!
31
Some closed-source parts of the Oracle JDK will
be open-sourced
• Flight recorder
• Mission control
• Others
Slide 32
Slide 32 text
@jeanneboyarsky
Where did it go?
32
Other closed-source parts will be removed
• Browser Plugin
• Java Web Start
• JavaFX (Lives on as OpenJFX)
Slide 33
Slide 33 text
@jeanneboyarsky
FUD quiz #1
There will be a LTS release every 3 years. How
long for free updates?
6 months
33
Slide 34
Slide 34 text
@jeanneboyarsky
FUD quiz #2
Which of these require a paid license to Oracle?
• Open JDK 11
• Oracle JDK 11
Oracle JDK 11
34
Slide 35
Slide 35 text
@jeanneboyarsky
FUD quiz #3
How long can Oracle JDK 8 be used in Prod for
free?
Forever (but no security patches)
35
Slide 36
Slide 36 text
@jeanneboyarsky
FUD quiz #4
How long will Oracle contribute to Open JDK for
each release?
6 months
36
Slide 37
Slide 37 text
@jeanneboyarsky
FUD quiz #5
How long will Oracle backport updates and security
patches?
0 months
37
Slide 38
Slide 38 text
@jeanneboyarsky
FUD quiz #6
Is anyone backporting updates and security
patches?
RedHat
38
Slide 39
Slide 39 text
@jeanneboyarsky
FUD quiz #7
Is it enough to pass the TCK (Technology
Compatibility Kit) to be Java SE?
No. If vendor doesn’t pay Oracle, “Java SE
Compatible”
39
Slide 40
Slide 40 text
@jeanneboyarsky
Vendor JDKs
• Vulnerability Security Group
• Backporting – non trivial
• Features removed
• What is a bug/security patch/enhancement
40
Slide 41
Slide 41 text
@jeanneboyarsky 41
Java 8 LTS March 2026
Java 11 LTS Sept 2027
Java 13 MTS March 2023
Java 15 MTS March 2023
Java 17 LTS Sept 2030
All others Free 6 months
Azul Zulu
Slide 42
Slide 42 text
@jeanneboyarsky 42
Java 8 Free Updates – Adopt OpenJDK
Paid support - IBM
March 2023+
Java 11 Free updates – Adopt OpenJDK
Paid support - IBM
Sept 2022+
All
others
Free updates – Adopt OpenJDK 6 months
Adopt OpenJDK + IBM
+ means support as long as source maintained
Slide 43
Slide 43 text
@jeanneboyarsky 43
RedHat
• Java 8, 9, 10 still available
• Java 8 and 11 supported
• Will maintain OpenJDK after Oracle support
ends
Slide 44
Slide 44 text
@jeanneboyarsky 44
Others
• SAP distributes Java 10 + 11
Don’t be sad if your favorite JDK is missing. Just
examples!
Slide 45
Slide 45 text
@jeanneboyarsky 45
Mark’s slide from the keynote
Slide 46
Slide 46 text
@jeanneboyarsky
QUESTIONS AND BONUS MATERIALS
46
Slide 47
Slide 47 text
@jeanneboyarsky
Tip: Aliases
alias javac11=/Library/Java/JavaVirtualMachines/
jdk-11.jdk/Contents/Home/bin/javac
alias java11=/Library/Java/JavaVirtualMachines/
jdk-11.jdk/Contents/Home/bin/java
47
Slide 48
Slide 48 text
@jeanneboyarsky
LOCAL VARIABLE SYNTAX
(10/11)
48
Slide 49
Slide 49 text
@jeanneboyarsky
String name = "Jeanne”;
var name = "Jeanne";
List list = List.of(1, 2, 3);
var list = List.of(1, 2, 3);
• Syntactical sugar/less boilerplate
• Not immutable (no val)
(10)
49
Slide 50
Slide 50 text
@jeanneboyarsky
var name = "Jeanne";
String name2 = name;
• Compiled code same with var
(10)
50
Slide 51
Slide 51 text
@jeanneboyarsky
List headers =
thead.findElements(By.tagName("th"));
VolunteerDashboardRow headerRow = new
VolunteerDashboardRow(headers);
vs
var headers =
thead.findElements(By.tagName("th"));
var headerRow = new
VolunteerDashboardRow(headers);
(10)
51
Slide 52
Slide 52 text
@jeanneboyarsky
var csvPath = createAndGetFile(CSV_DATA);
try (var csvWriter =
Files.newBufferedWriter(csvPath);
var csvPrinter = new
CSVPrinter(csvWriter,
CSVFormat.DEFAULT)); {
}
(10)
52
Slide 53
Slide 53 text
@jeanneboyarsky
Map productMap1
= new HashMap();
Map productMap2
= new HashMap<>();
var productMap3
= new HashMap();
(10)
53
Slide 54
Slide 54 text
@jeanneboyarsky
Where can we use?
var name = "Jeanne";
var other = name + 2;
var list = List.of(1, 2, 3);
for (var num : list) {}
(10)
54
Slide 55
Slide 55 text
@jeanneboyarsky
Where can’t we use?
class Inner { var bad = "abc"; }
var noGood;
noGood = 4;
• Also instance variables, etc
(10)
55
Slide 56
Slide 56 text
@jeanneboyarsky
Does this work?
var var = "var";
(10)
56
Slide 57
Slide 57 text
@jeanneboyarsky
(10)
Pros Cons
Less typing Loss of information
Less redundancy Variable names matter
more
Can scan variable
names
Be careful!
57
http://openjdk.java.net/projects/amber/LVTIstyle.html
@jeanneboyarsky
Annotations
BiPredicate<
Map,
List> func =
(@NotNull var map, var list) -> true;
(11)
59
Slide 60
Slide 60 text
@jeanneboyarsky
All or nothing
Good
(var map, var list) -> true
No good
(var map, list) -> true
(var map, List list) -> true
(11)
60
Slide 61
Slide 61 text
@jeanneboyarsky
GARBAGE COLLECTION
(10/11)
61
Slide 62
Slide 62 text
@jeanneboyarsky
Choose your own GC
• Who cares?
• Agile. With releases every 6 months, features
are smaller
(10)
62
Slide 63
Slide 63 text
@jeanneboyarsky
Faster Default GC
Java 8 Parallel Garbage Collector
Java 9 G1 GC
Java 10 + 11 G1 GC with parallel
implementation
(10)
For more, see https://speakerdeck.com/cguntur/garbage-
collection-in-java-9
63
Slide 64
Slide 64 text
@jeanneboyarsky
Regions & space vs speed (10)
For more, see https://speakerdeck.com/cguntur
64
Slide 65
Slide 65 text
@jeanneboyarsky
Epsilon GC (11)
• Never reclaims memory
• Program proceeds until run out of heap
• GC never runs
• To use:
• -XX:+UseEpsilonGC
• (or) -XX:+UseNoGC
65
Slide 66
Slide 66 text
@jeanneboyarsky
Epsilon GC Good for (11)
• Performance/memory stress test
• Very short programs
• Last ditch performance improvements
(this probably isn’t you)
66
Slide 67
Slide 67 text
@jeanneboyarsky
Z GC (11)
• Experimental
• 10ms or less pause time
• Only for Linux/x64
• To use, enable both:
• -XX:+UnlockExperimentalVMOptions
• -XX:+UseZGC
67
@jeanneboyarsky
System.out.println(
System.getProperty("java.version.version"));
• Null for Open JDK
• For vendor use
(10)
Yes, version is
here twice!
74
Slide 75
Slide 75 text
@jeanneboyarsky
ODDS AND ENDS
75
Slide 76
Slide 76 text
@jeanneboyarsky
New java launcher mode
Full command Shorthand
javac HelloWorld.java
java HelloWorld
java HelloWorld.java
Produces class file Fully in memory
For any program For programs with one
class
(11)
76
@jeanneboyarsky
Behind the Scenes
• Nest based access control
• Remove hack for private access in nested
classes
• Pay off tech debt
(11)
78
Slide 79
Slide 79 text
@jeanneboyarsky
Nashorn
Java 11 • Challenging to maintain
• Unclear adoption
• May be adopted
• Made it into Java 11
two days before cutoff
(11)
79
Slide 80
Slide 80 text
@jeanneboyarsky
Unicode 9 and 10 Support
Languages + emoji
(10+11)
80
Slide 81
Slide 81 text
@jeanneboyarsky
Tying it all together (10+11)
81
import java.nio.charset.*;
public class Unicode {
public static void main(String... args) {
System.out.print("Have a \uD83C\uDF7A");
System.out.println(" or a \uD83E\uDD64");
}
}