Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2018-QCon-Java-11.pdf

 2018-QCon-Java-11.pdf

Jeanne Boyarsky

June 28, 2018
Tweet

More Decks by Jeanne Boyarsky

Other Decks in Programming

Transcript

  1. @jeanneboyarsky Java 11 – Keeping the Java Release Train on

    the Right Track speakerdeck.com/boyarsky Jeanne Boyarsky QCon– June 28, 2018
  2. @jeanneboyarsky Til Java 6 (1996- 2006) Hi Oracle (2010) Java

    7 (2011) Java 8 (2014) Java 9 (2017) 8
  3. @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 9
  4. @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 13
  5. @jeanneboyarsky Java School Report Card Developer Community à A Features

    à B Frequency of Release à F Predictability of Release à D 14
  6. @jeanneboyarsky JVM College Report Card Vocabulary à B Polyglot programming

    à A Frequency of Release à F Predictability of Release à D 15
  7. @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 17
  8. @jeanneboyarsky Before Now Releases every Varies 6 months (or 3

    years) Releases are Feature driven Date driven 20
  9. @jeanneboyarsky Arrivals Train Schedule Java Release Date Long Term Support

    9 September 21, 2017 10 March 20, 2018 11 September 25, 2018 22
  10. @jeanneboyarsky Security Patches Departure Schedule Java Public Patches Paid Patches

    6 2013 Late 2018 7 2015 2022 8 January 2019 (business) December 2020 (public) 2025 23
  11. @jeanneboyarsky Security Patches Departure Schedule Java Public patches Paid patches

    9 March 2018 n/a 10 September 2018 n/a 11 March 2019 2023-2028 24
  12. @jeanneboyarsky Wait. So what happens next? How long will Java

    12 have security patches? Answer: 6 months What is the next LTS version after Java 11? Java 11 + 3*2 = 17 25
  13. @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 26
  14. @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) 31
  15. @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) 33
  16. @jeanneboyarsky var csvPath = createAndGetFile(CSV_DATA); try (var csvWriter = Files.newBufferedWriter(csvPath);

    var csvPrinter = new CSVPrinter(csvWriter, CSVFormat.DEFAULT)); { } (10) 34
  17. @jeanneboyarsky Map<Integer, String> productMap1 = new HashMap<Integer, String>(); Map<Integer, String>

    productMap2 = new HashMap<>(); var productMap3 = new HashMap<Integer, String>(); (10) 35
  18. @jeanneboyarsky Where can we use? var name = "Jeanne"; var

    other = name + 2; var list = List.of(1, 2, 3); for (var num : list) {} (10) 36
  19. @jeanneboyarsky Where can’t we use? class Inner { var bad

    = "abc"; } var noGood; noGood = 4; •  Also instance variables, etc (10) 37
  20. @jeanneboyarsky (10) Pros Cons Less typing Loss of information Less

    redundancy Variable names matter more Can scan variable names Be careful! 39 http://openjdk.java.net/projects/amber/LVTIstyle.html
  21. @jeanneboyarsky Lambdas Predicate<String> pred1 = p -> true; Predicate<String> pred2

    = (String p) -> true; Predicate<String> pred3 = (var p) -> true; (11) 40
  22. @jeanneboyarsky All or nothing Good (var map, var list) ->

    true No good (var map, list) -> true (var map, List list) -> true (11) 42
  23. @jeanneboyarsky Choose your own GC •  Who cares? •  Agile.

    With releases every 6 months, features are smaller (10) 44
  24. @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 45
  25. @jeanneboyarsky Epsilon GC (11) •  Never reclaims memory •  Program

    proceeds until run out of heap •  GC never runs •  To use: •  -XX:+UseEpsilonGC •  (or) -XX:+UseNoGC 47
  26. @jeanneboyarsky Epsilon GC Good for (11) •  Performance/memory stress test

    •  Very short programs •  Last ditch performance improvements (this probably isn’t you) 48
  27. @jeanneboyarsky Z GC (11) •  Experimental •  10ms or less

    pause time •  Only for Linux/x64 •  To use, enable both: •  -XX:+UnlockExperimentalVMOptions •  -XX:+UseZGC 49
  28. @jeanneboyarsky (11) var uri = "http://www.google.com"; var client = HttpClient.newHttpClient();

    var request = HttpRequest.newBuilder() .uri(URI.create(uri)) .build(); var response = client.send(request, BodyHandlers.ofString()); System.out.println(response.body()); 51
  29. @jeanneboyarsky (11) var client = HttpClient.newHttpClient(); var requests = uris.stream()

    .map(HttpRequest::newBuilder) .map(reqBuilder -> reqBuilder.build()) .collect(toList()); CompletableFuture.allOf(requests.stream() .map(r->client.sendAsync(r, ofString())) .toArray(CompletableFuture<?>[]::new)) .join(); 52
  30. @jeanneboyarsky Other APIs •  BodyHandlers – file, inputstream, string, discarding

    •  Request Builder Options – Header, proxy, authenticator, http protocol version •  Methods – get/post/put/delete (11) 53
  31. @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) 55
  32. @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 58
  33. @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) 62
  34. @jeanneboyarsky Unmodifiable Collections (10) 63 Copying another Terminal operations List.copyOf

    Collectors.toUnmodifiableList Set.copyOf Collectors.toUnmodifiableSet Map.copyOf Collectors.toUnmodifiableMap
  35. @jeanneboyarsky Behind the Scenes •  Nest based access control • 

    Remove hack for private access in nested classes •  Pay off tech debt (11) 64
  36. @jeanneboyarsky Nashorn Java 11 •  Challenging to maintain •  Unclear

    adoption •  May be adopted •  Made it into Java 11 two days before cutoff (11) 67
  37. @jeanneboyarsky Tying it all together (10+11) 69 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"); } }