Slide 1

Slide 1 text

@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

Slide 6

Slide 6 text

@jeanneboyarsky Topics: •  Ecosystem changes •  VMs •  Bonus: Language changes 6

Slide 7

Slide 7 text

@jeanneboyarsky About Me 16 years as Java Developer Note where I don’t work! 7

Slide 8

Slide 8 text

@jeanneboyarsky Memories! 8

Slide 9

Slide 9 text

@jeanneboyarsky Til Java 6 (1996- 2006) Hi Oracle (2010) Java 7 (2011) Java 8 (2014) Java 9 (2017) 9

Slide 10

Slide 10 text

@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

Slide 11

Slide 11 text

@jeanneboyarsky Java 9 “Release” Dates •  Sept 2016 •  May 2017 •  July 2017 •  Sept 2017 11

Slide 12

Slide 12 text

@jeanneboyarsky Counting lessons? •  1.0, 1.1, 1.2, 1.3, 1.4 •  5.0 •  6, 7, 8, 9, 10, 11 12

Slide 13

Slide 13 text

@jeanneboyarsky Advanced counting lessons •  10 = 2018.3 •  11 = 2018.9 •  12 = ? 13

Slide 14

Slide 14 text

@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

Slide 58

Slide 58 text

@jeanneboyarsky Lambdas Predicate pred1 = p -> true; Predicate pred2 = (String p) -> true; Predicate pred3 = (var p) -> true; (11) 58

Slide 59

Slide 59 text

@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

Slide 68

Slide 68 text

@jeanneboyarsky TIME BASED VERSIONING (10) 68

Slide 69

Slide 69 text

@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

Slide 70

Slide 70 text

@jeanneboyarsky (10) 10.0.1 11-ea [deprecated] major() 10 11 [deprecated] minor() 0 0 [deprecated] security() 1 0 70

Slide 71

Slide 71 text

@jeanneboyarsky (10) 10.0.1 11-ea feature() 10 11 interim() 0 0 update() 1 0 patch() 0 0 71

Slide 72

Slide 72 text

@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

Slide 73

Slide 73 text

@jeanneboyarsky System.out.println( System.getProperty("java.version.date")); (10) 10.0.1 11-ea 2018-04-17 2018-09-25 Yes, the future! 73

Slide 74

Slide 74 text

@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

Slide 77

Slide 77 text

@jeanneboyarsky Unmodifiable Collections (10) 77 Copying another Terminal operations List.copyOf Collectors.toUnmodifiableList Set.copyOf Collectors.toUnmodifiableSet Map.copyOf Collectors.toUnmodifiableMap

Slide 78

Slide 78 text

@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"); } }

Slide 82

Slide 82 text

@jeanneboyarsky @jeanneboyarsky