Share
Embed
Transcript
82 slides
-
@jeanneboyarsky Jeanne Boyarsky Wednesday, October 24, 2018 Oracle Code One
– DEV5125 Which Java Version from which Vendor with what Support? speakerdeck.com/boyarsky -
@jeanneboyarsky Martijn Verberg (JClarity) Simon Ritter (Azul) Steve Poole &
Tim Ellison (IBM) Simon Maple (LJC) Trisha Gee ??? (Red Hat) Thank you to… -
@jeanneboyarsky For more on Java 9 (or 10 or 11),
see: https://speakerdeck.com/ boyarsky 5 -
@jeanneboyarsky About Me 16 years as Java Developer Note where
I don’t work! 7 -
@jeanneboyarsky Til Java 6 (1996- 2006) Hi Oracle (2010) Java
7 (2011) Java 8 (2014) Java 9 (2017) 9 -
@jeanneboyarsky The Saga of Jigsaw • 2011 – Maybe part
of Java 7. Nope Plan B • 2012 - Part of Java 8. No wait • 2014 - Part of Java 9 10 -
@jeanneboyarsky Java 9 “Release” Dates • Sept 2016 • May
2017 • July 2017 • Sept 2017 11 -
@jeanneboyarsky Counting lessons? • 1.0, 1.1, 1.2, 1.3, 1.4 •
5.0 • 6, 7, 8, 9, 10, 11 12 -
@jeanneboyarsky Advanced counting lessons • 10 = 2018.3 • 11
= 2018.9 • 12 = ? 13 -
@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 -
@jeanneboyarsky Java School Report Card Developer Community à A Features
à B Frequency of Release à F Predictability of Release à D 15 -
@jeanneboyarsky JVM College Report Card Vocabulary à B Polyglot programming
à A Frequency of Release à F Predictability of Release à D 16 -
@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 -
@jeanneboyarsky Before Now Releases every Varies 6 months (or 3
years LTS) Releases are Feature driven Date driven Oracle/OpenJDK Communications -
@jeanneboyarsky Patches Ask vendor a question What is Long Term
Support? Oracle defined as 3 years. Other vendors (mostly) following definition. -
@jeanneboyarsky More time to code while I wait for the
next train! 23 -
@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 -
@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 -
@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 -
@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 -
@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 -
@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 -
@jeanneboyarsky Found it! 31 Some closed-source parts of the Oracle
JDK will be open-sourced • Flight recorder • Mission control • Others -
@jeanneboyarsky Where did it go? 32 Other closed-source parts will
be removed • Browser Plugin • Java Web Start • JavaFX (Lives on as OpenJFX) -
@jeanneboyarsky FUD quiz #1 There will be a LTS release
every 3 years. How long for free updates? 6 months 33 -
@jeanneboyarsky FUD quiz #2 Which of these require a paid
license to Oracle? • Open JDK 11 • Oracle JDK 11 Oracle JDK 11 34 -
@jeanneboyarsky FUD quiz #3 How long can Oracle JDK 8
be used in Prod for free? Forever (but no security patches) 35 -
@jeanneboyarsky FUD quiz #4 How long will Oracle contribute to
Open JDK for each release? 6 months 36 -
@jeanneboyarsky FUD quiz #5 How long will Oracle backport updates
and security patches? 0 months 37 -
@jeanneboyarsky FUD quiz #6 Is anyone backporting updates and security
patches? RedHat 38 -
@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 -
@jeanneboyarsky Vendor JDKs • Vulnerability Security Group • Backporting –
non trivial • Features removed • What is a bug/security patch/enhancement 40 -
@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 -
@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 -
@jeanneboyarsky 43 RedHat • Java 8, 9, 10 still available
• Java 8 and 11 supported • Will maintain OpenJDK after Oracle support ends -
@jeanneboyarsky 44 Others • SAP distributes Java 10 + 11
Don’t be sad if your favorite JDK is missing. Just examples! -
@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 -
@jeanneboyarsky var name = "Jeanne"; String name2 = name; •
Compiled code same with var (10) 50 -
@jeanneboyarsky List<WebElement> 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 -
@jeanneboyarsky var csvPath = createAndGetFile(CSV_DATA); try (var csvWriter = Files.newBufferedWriter(csvPath);
var csvPrinter = new CSVPrinter(csvWriter, CSVFormat.DEFAULT)); { } (10) 52 -
@jeanneboyarsky Map<Integer, String> productMap1 = new HashMap<Integer, String>(); Map<Integer, String>
productMap2 = new HashMap<>(); var productMap3 = new HashMap<Integer, String>(); (10) 53 -
@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 -
@jeanneboyarsky Where can’t we use? class Inner { var bad
= "abc"; } var noGood; noGood = 4; • Also instance variables, etc (10) 55 -
@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 Lambdas Predicate<String> pred1 = p -> true; Predicate<String> pred2
= (String p) -> true; Predicate<String> pred3 = (var p) -> true; (11) 58 -
@jeanneboyarsky Annotations BiPredicate< Map<Integer, String>, List<String>> func = (@NotNull var
map, var list) -> true; (11) 59 -
@jeanneboyarsky All or nothing Good (var map, var list) ->
true No good (var map, list) -> true (var map, List list) -> true (11) 60 -
@jeanneboyarsky Choose your own GC • Who cares? • Agile.
With releases every 6 months, features are smaller (10) 62 -
@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 -
@jeanneboyarsky Regions & space vs speed (10) For more, see
https://speakerdeck.com/cguntur 64 -
@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 -
@jeanneboyarsky Epsilon GC Good for (11) • Performance/memory stress test
• Very short programs • Last ditch performance improvements (this probably isn’t you) 66 -
@jeanneboyarsky Z GC (11) • Experimental • 10ms or less
pause time • Only for Linux/x64 • To use, enable both: • -XX:+UnlockExperimentalVMOptions • -XX:+UseZGC 67 -
@jeanneboyarsky String javaVersion = System.getProperty("java.version"); Runtime.Version version = Runtime.Version.parse(javaVersion); System.out.println(javaVersion
+ ": " + version.feature() + " " + version.interim() + " " + version.update() + " " + version.patch()); (10) 69 -
@jeanneboyarsky (10) 10.0.1 11-ea [deprecated] major() 10 11 [deprecated] minor()
0 0 [deprecated] security() 1 0 70 -
@jeanneboyarsky (10) 10.0.1 11-ea feature() 10 11 interim() 0 0
update() 1 0 patch() 0 0 71 -
@jeanneboyarsky (10) Updates Examples feature() Every 6 months 10, 11,
12 interim() n/a for Open JDK 0 update() Within 6 months 0, 1, 2 patch() Emergencies 0, 1, 2 72 -
@jeanneboyarsky System.out.println( System.getProperty("java.version.version")); • Null for Open JDK • For
vendor use (10) Yes, version is here twice! 74 -
@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 Unmodifiable Collections (10) 77 Copying another Terminal operations List.copyOf
Collectors.toUnmodifiableList Set.copyOf Collectors.toUnmodifiableSet Map.copyOf Collectors.toUnmodifiableMap -
@jeanneboyarsky Behind the Scenes • Nest based access control •
Remove hack for private access in nested classes • Pay off tech debt (11) 78 -
@jeanneboyarsky Nashorn Java 11 • Challenging to maintain • Unclear
adoption • May be adopted • Made it into Java 11 two days before cutoff (11) 79 -
@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"); } }