Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2018-QCon-Java-11.pdf
Search
Jeanne Boyarsky
June 28, 2018
Programming
2
680
2018-QCon-Java-11.pdf
Jeanne Boyarsky
June 28, 2018
Tweet
Share
More Decks by Jeanne Boyarsky
See All by Jeanne Boyarsky
Timeline of a (NYC) FRC Session/Regional
boyarsky
0
9
2025 Toastmasters Path Reference
boyarsky
0
77
2025 Toastmasters Path Changes Update Overview and Reference
boyarsky
0
55
Mentor_Conference_Presentation.pdf
boyarsky
0
19
2025-java-does-what-now.pdf
boyarsky
0
90
Beyond JUnit 5
boyarsky
0
49
Java 21 Certification (or learning new features)
boyarsky
0
110
Preparing for the Java 21 cert + Learning New Features
boyarsky
0
240
Mastering Logging in Java
boyarsky
0
140
Other Decks in Programming
See All in Programming
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
350
これならできる!個人開発のすゝめ
tinykitten
PRO
0
150
ゲームの物理 剛体編
fadis
0
400
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
770
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
190
CSC307 Lecture 02
javiergs
PRO
1
760
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
5.1k
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.5k
Grafana:建立系統全知視角的捷徑
blueswen
0
280
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
120
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
180
Implementation Patterns
denyspoltorak
0
140
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
100
How to build a perfect <img>
jonoalderson
1
4.8k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Between Models and Reality
mayunak
1
160
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Optimizing for Happiness
mojombo
379
70k
Heart Work Chapter 1 - Part 1
lfama
PRO
4
35k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
110
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
140
Transcript
@jeanneboyarsky Java 11 – Keeping the Java Release Train on
the Right Track speakerdeck.com/boyarsky Jeanne Boyarsky QCon– June 28, 2018
@jeanneboyarsky So much changed since Java 9 & Jigsaw’s release!
2
@jeanneboyarsky 3
@jeanneboyarsky For more on Java 9, see: https://speakerdeck.com/ boyarsky/welcome-to- java-9?slide=1
4
@jeanneboyarsky Topics: • Ecosystem changes • Language changes 5
@jeanneboyarsky About Me 16 years as Java Developer 6
@jeanneboyarsky Memories! 7
@jeanneboyarsky Til Java 6 (1996- 2006) Hi Oracle (2010) Java
7 (2011) Java 8 (2014) Java 9 (2017) 8
@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
@jeanneboyarsky Java 9 “Release” Dates • Sept 2016 • May
2017 • July 2017 • Sept 2017 10
@jeanneboyarsky Counting lessons? • 1.0, 1.1, 1.2, 1.3, 1.4 •
5.0 • 6, 7, 8, 9, 10, 11 11
@jeanneboyarsky Advanced counting lessons • 10 = 2018.3 • 11
= 2018.9 • 12 = ? 12
@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
@jeanneboyarsky Java School Report Card Developer Community à A Features
à B Frequency of Release à F Predictability of Release à D 14
@jeanneboyarsky JVM College Report Card Vocabulary à B Polyglot programming
à A Frequency of Release à F Predictability of Release à D 15
@jeanneboyarsky Re-org at the train station 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 17
@jeanneboyarsky Before Now 18
@jeanneboyarsky Before Now 19
@jeanneboyarsky Before Now Releases every Varies 6 months (or 3
years) Releases are Feature driven Date driven 20
@jeanneboyarsky More time to code while I wait for the
next train! 21
@jeanneboyarsky Arrivals Train Schedule Java Release Date Long Term Support
9 September 21, 2017 10 March 20, 2018 11 September 25, 2018 22
@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
@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
@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
@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
@jeanneboyarsky Only bug fixes remain Only bug fixes allowed 27
@jeanneboyarsky Get ready to play 28
@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 29
@jeanneboyarsky LOCAL VARIABLE SYNTAX (10/11) 30
@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
@jeanneboyarsky var name = "Jeanne"; String name2 = name; •
Compiled code same with var (10) 32
@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
@jeanneboyarsky var csvPath = createAndGetFile(CSV_DATA); try (var csvWriter = Files.newBufferedWriter(csvPath);
var csvPrinter = new CSVPrinter(csvWriter, CSVFormat.DEFAULT)); { } (10) 34
@jeanneboyarsky Map<Integer, String> productMap1 = new HashMap<Integer, String>(); Map<Integer, String>
productMap2 = new HashMap<>(); var productMap3 = new HashMap<Integer, String>(); (10) 35
@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
@jeanneboyarsky Where can’t we use? class Inner { var bad
= "abc"; } var noGood; noGood = 4; • Also instance variables, etc (10) 37
@jeanneboyarsky Does this work? var var = "var"; (10) 38
@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
@jeanneboyarsky Lambdas Predicate<String> pred1 = p -> true; Predicate<String> pred2
= (String p) -> true; Predicate<String> pred3 = (var p) -> true; (11) 40
@jeanneboyarsky Annotations BiPredicate< Map<Integer, String>, List<String>> func = (@NotNull var
map, var list) -> true; (11) 41
@jeanneboyarsky All or nothing Good (var map, var list) ->
true No good (var map, list) -> true (var map, List list) -> true (11) 42
@jeanneboyarsky GARBAGE COLLECTION (10/11) 43
@jeanneboyarsky Choose your own GC • Who cares? • Agile.
With releases every 6 months, features are smaller (10) 44
@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
@jeanneboyarsky Regions & space vs speed (10) For more, see
https://speakerdeck.com/cguntur 46
@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
@jeanneboyarsky Epsilon GC Good for (11) • Performance/memory stress test
• Very short programs • Last ditch performance improvements (this probably isn’t you) 48
@jeanneboyarsky Z GC (11) • Experimental • 10ms or less
pause time • Only for Linux/x64 • To use, enable both: • -XX:+UnlockExperimentalVMOptions • -XX:+UseZGC 49
@jeanneboyarsky HTTP CLIENT (11) I’m done incubating! 50
@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
@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
@jeanneboyarsky Other APIs • BodyHandlers – file, inputstream, string, discarding
• Request Builder Options – Header, proxy, authenticator, http protocol version • Methods – get/post/put/delete (11) 53
@jeanneboyarsky TIME BASED VERSIONING (10) 54
@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
@jeanneboyarsky (10) 10.0.1 11-ea [deprecated] major() 10 11 [deprecated] minor()
0 0 [deprecated] security() 1 0 56
@jeanneboyarsky (10) 10.0.1 11-ea feature() 10 11 interim() 0 0
update() 1 0 patch() 0 0 57
@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
@jeanneboyarsky System.out.println( System.getProperty("java.version.date")); (10) 10.0.1 11-ea 2018-04-17 2018-09-25 Yes, the
future! 59
@jeanneboyarsky System.out.println( System.getProperty("java.version.version")); • Null for Open JDK • For
vendor use (10) Yes, version is here twice! 60
@jeanneboyarsky ODDS AND ENDS 61
@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
@jeanneboyarsky Unmodifiable Collections (10) 63 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) 64
@jeanneboyarsky JDK Java EE/Corba Modules Java 9 Java 11 (11)
65
@jeanneboyarsky Pack200 Tools Java 11 à Use jlink to compress packages
(11) 66
@jeanneboyarsky Nashorn Java 11 • Challenging to maintain • Unclear
adoption • May be adopted • Made it into Java 11 two days before cutoff (11) 67
@jeanneboyarsky Unicode 9 and 10 Support Languages + emoji (10+11)
68
@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"); } }