SlideShare a Scribd company logo
@delabassee
DevRel Java Platform Group
Singapore JUG
May 2020
David Delabassée
Java and the forty versionsJava and the forty versions
fourteen
The following is intended to outline our general product direction. It is intended for information
purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any
material, code, or functionality, and should not be relied upon in making purchasing decisions. The
development, release, timing, and pricing of any features or functionality described for Oracle’s
products may change and remains at the sole discretion of Oracle Corporation.
Safe harbor statement
Copyright © 2020, Oracle and/or its affiliates2
Copyright © 2020, Oracle and/or its affiliates3
Developer productivity
Application performance
In the face of constantly-evolving
programming paradigms,
application styles,
deployment styles
and hardware.
Copyright © 2020, Oracle and/or its affiliates4
Java 9 / JDK 9 - 90 JEPs
102 Process API Updates
110 HTTP 2 Client
143 Improve Contended Locking
158 Unified JVM Logging
165 Compiler Control
193 Variable Handles
197 Segmented Code Cache
199 Smart Java Compilation, Phase Two
200 The Modular JDK
201 Modular Source Code
211 Elide Deprecation Warnings on Import Stats.
212 Resolve Lint and Doclint Warnings
213 Milling Project Coin
214 Remove GC Combinations Deprecated in JDK 8
215 Tiered Attribution for javac
216 Process Import Statements Correctly
217 Annotations Pipeline 2.0
219 Datagram Transport Layer Security (DTLS)
220 Modular Run-Time Images
221 Simplified Doclet API
222 jshellThe Java Shell (Read-Eval-Print Loop)
223 New Version-String Scheme
224 HTML5 Javadoc
225 Javadoc Search
226 UTF-8 Property Files
227 Unicode 7.0
228 Add More Diagnostic Commands
229 Create PKCS12 Keystores by Default
231 Remove Launch-Time JRE Version Selection
232 Improve Secure Application Performance
233 Generate Run-Time Compiler Tests Automatically
235 Test Class-File Attributes Generated by javac
236 Parser API for Nashorn
237 Linux/AArch64 Port
238 Multi-Release JAR Files
240 Remove the JVM TI hprof Agent
241 Remove the jhat Tool
243 Java-Level JVM Compiler Interface
244 TLS ALPN Extension
245 Validate JVM Command-Line Flag Arguments
246 Leverage CPU Instructions for GHASH and RSA
247 Compile for Older Platform Versions
248 Make G1 the Default Garbage Collector
249 OCSP Stapling for TLS
250 Store Interned Strings in CDS Archives
251 Multi-Resolution Images
252 Use CLDR Locale Data by Default
253 Prepare JavaFX UI Controls & CSS APIs for Modul.
254 Compact Strings
255 Merge Selected Xerces 2.11.0 Updates into JAXP
256 BeanInfo Annotations
257 Update JavaFX/Media to Newer Ver of GStreamer
258 HarfBuzz Font-Layout Engine
259 Stack-Walking API
260 Encapsulate Most Internal APIs
261 Module System
262 TIFF Image I/O
263 HiDPI Graphics on Windows and Linux
264 Platform Logging API and Service
265 Marlin Graphics Renderer
266 More Concurrency Updates
267 Unicode 8.0
268 XML Catalogs
269 Convenience Factory Methods for Collections
270 Reserved Stack Areas for Critical Sections
271 Unified GC Logging
272 Platform-Specific Desktop Features
273 DRBG-Based SecureRandom Implementations
274 Enhanced Method Handles
275 Modular Java Application Packaging
276 Dynamic Link of Language-Def. Object Models
277 Enhanced Deprecation
278 Additional Tests for Humongous Objs in G1
279 Improve Test-Failure Troubleshooting
280 Indify String Concatenation
281 HotSpot C++ Unit-Test Framework
282 jlinkThe Java Linker
283 Enable GTK 3 on Linux
284 New HotSpot Build System
285 Spin-Wait Hints
287 SHA-3 Hash Algorithms
288 Disable SHA-1 Certificates
289 Deprecate the Applet API
290 Filter Incoming Serialization Data
291 Deprecate the Concurrent Mark Sweep GC
292 Implement Selected ES6 Features in Nashorn
294 Linux/s390x Port
295 Ahead-of-Time Compilation
297 Unified arm32/arm64 Port
298 Remove Demos and Samples
299 Reorganize Documentation
Copyright © 2020, Oracle and/or its affiliates5
2017 2018 2019 2020 2021 2022 2023 2024
9
10
11
12
13
14
15
16
17
18
19
11
17
Copyright © 2020, Oracle and/or its affiliates6
Oracle offers users choice
https://oracle.com/java
https://jdk.java.net
Copyright © 2020, Oracle and/or its affiliates7
Issues fixed in JDK 14 per organization
https://blogs.oracle.com/java-platform-group/the-arrival-of-java-14
Copyright © 2020, Oracle and/or its affiliates8
Java is still free!
Copyright © 2020, Oracle and/or its affiliates9
• Predictable release cadence
• JEPs
- https://openjdk.java.net/jeps
• Feedback
- Preview features, experimental features, incubator modules + EA JDK builds
• Project Skara
- Investigate alternative SCM and code review options for OpenJDK
- Git, hosted Git provider & tooling
- Already moved
- Amber, Skara, jfx, jmc, Loom, Panama-foreign, … + R/O mirrors
- https://github.com/openjdk/
Foster Faster Innovations
Copyright © 2020, Oracle and/or its affiliates10
Java is still free!
Delivering Faster
Copyright © 2020, Oracle and/or its affiliates11
Java 10 (March 2018) 12 JEPs
286 Local-Variable Type Inference
296 Consolidate the JDK Forest into a Single Repository
304 Garbage-Collector Interface
307 Parallel Full GC for G1
310 Application Class-Data Sharing
312 Thread-Local Handshakes
313 Remove the Native-Header Generation Tool (javah)
314 Additional Unicode Language-Tag Extensions
316 Heap Allocation on Alternative Memory Devices
317 Experimental Java-Based JIT Compiler
319 Root Certificates
322 Time-Based Release Versioning
Copyright © 2020, Oracle and/or its affiliates12
Java 11 (September 2018) 17 JEPs
181 Nest-Based Access Control
309 Dynamic Class-File Constants
315 Improve Aarch64 Intrinsics
318 Epsilon: A No-Op Garbage Collector (Experimental)
320 Remove the Java EE and CORBA Modules
321 HTTP Client (Standard)
323 Local-Variable Syntax for Lambda Parameters
324 Key Agreement with Curve25519 and Curve448
327 Unicode 10
328 Flight Recorder
329 ChaCha20 and Poly1305 Cryptographic Algorithms
330 Launch Single-File Source-Code Programs
331 Low-Overhead Heap Profiling
332 Transport Layer Security (TLS) 1.3
333 ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
335 Deprecate the Nashorn JavaScript Engine
336 Deprecate the Pack200 Tools and API
Copyright © 2020, Oracle and/or its affiliates13
Java 12 (March 2019) 8 JEPs
189 Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
230 Microbenchmark Suite
325 Switch Expressions (Preview)
334 JVM Constants API
340 One AArch64 Port, Not Two
341 Default CDS Archives
344 Abortable Mixed Collections for G1
346 Promptly Return Unused Committed Memory from G1
Copyright © 2020, Oracle and/or its affiliates14
Java 13 (September 2019) 5 JEPs
350 Dynamic CDS Archives
351 ZGC: Uncommit Unused Memory
353 Reimplement the Legacy Socket API
354 Switch Expressions (Preview)
355 Text Blocks (Preview)
Copyright © 2020, Oracle and/or its affiliates15
Java 14 (March 2020) 16 JEPs
305 Pattern Matching for instanceof (Preview)
343 Packaging Tool (Incubator)
345 NUMA-Aware Memory Allocation for G1
349 JFR Event Streaming
352 Non-Volatile Mapped Byte Buffers
358 Helpful NullPointerExceptions
359 Records (Preview)
361 Switch Expressions (Standard)
362 Deprecate the Solaris and SPARC Ports
363 Remove the Concurrent Mark Sweep (CMS) Garbage Collector
364 ZGC on macOS
365 ZGC on Windows
366 Deprecate the ParallelScavenge + SerialOld GC Combination
367 Remove the Pack200 Tools and API
368 Text Blocks (Second Preview)
370 Foreign-Memory Access API (Incubator)
14
Copyright © 2020, Oracle and/or its affiliates16
Java 15
https://bugs.openjdk.java.net/secure/Dashboard.jspa?selectPageId=19114
https://openjdk.java.net/projects/jdk/15/spec/
Rampdown Phase One (features freeze)
Rampdown Phase Two
Initial Release Candidate
Final Release Candidate
General Availability
2020/06/11
2020/07/16
2020/08/06
2020/08/20
2020/09/15
15
Copyright © 2020, Oracle and/or its affiliates17
Java is still free!
Delivering Faster
Richest Feature Pipeline Ever
Copyright © 2020, Oracle and/or its affiliates18
Innovating for the Future
ZGC
Create a scalable low
latency garbage collector
capable of handling
large heaps
Panama
Higher performance and
easier development of
I/O intensive applications
through Java-native
platform enhancements
Valhalla
Higher density and
performance of machine
learning and big data
applications through the
introduction of Value Types
Loom
Massively scale
lightweight threads,
making concurrency
simple again
Amber
Continuously improve
developer productivity
through evolutions of
the Java language
Metropolis
Implement more of the
JVM in Java starting
with the JIT complier
“Java-on-Java”
Copyright © 2020, Oracle and/or its affiliates19
• A Scalable Low Latency GC
- Low Latency ⇨ pause times stay below 10 ms, typically within 2 ms
- Scalable ⇨ pause times do not increase with the heap or live-set size
- Handle heaps ranging from a few megabytes to multi terabytes in size
• Use
- -XX:+UnlockExperimentalVMOption -XX:+UseZGC
• And tune
- -Xmx<size>
Zero GC
Copyright © 2020, Oracle and/or its affiliates20
• JDK 11
- Initial ZGC support on Linux (experimental) (JEP 333)
• JDK 12
- Support for concurrent class unloading, further pause time reduction
• JDK 13
- Linux/AArch64 support, max heap size increased to 16TB
• JDK 14
- MacOS (JEP 364) & Windows (JEP 365) support, JFR leak profiler, tiny heaps, …
• JDK 15
- Production! (JEP 377)
Zero GC
https://wiki.openjdk.java.net/display/zgc/Main
14
15
Copyright © 2020, Oracle and/or its affiliates21
Zero GC
https://www.jfokus.se/jfokus20-preso/OpenJDK-in-the-new-age-of-GC.pdf
22
G1 GC 14
0
1
2
3
4
5
JDK 8 JDK 11 JDK 14
• NUMA-Aware Memory Allocation for G1 - JEP 345
• ∼ 700 enhancements since JDK 8, across all areas!
- Across all areas ⇨ significant improvements
• Ex. Native memory usage over time (GB)
- BigRamTester, w. 16GB heap
JDK 8
JDK 11
JDK 14
Copyright © 2020, Oracle and/or its affiliates
Copyright © 2020, Oracle and/or its affiliates23
G1 GC
Normalized Scores
Higher is Better
max-jOPS
critical-jOPS
■
■
https://kstefanj.github.io/2020/04/16/g1-ootb-performance.html
100%
113%
95%
100%
150%
229%
0%
20%
40%
60%
80%
100%
120%
140%
160%
180%
200%
220%
240%
JDK 8 Parallel GC JDK 14 Parallel GC JDK 14 G1
-Xmx4g -Xms4g
SPECjbb®1 2015
OOTB - Fixed heap
14
SPEC® and SPECjbb® are registered trademarks of the Standard Performance Evaluation Corporation (www.spec.org/jbb2015/)
Copyright © 2020, Oracle and/or its affiliates24
Normalized Scores
Higher is Better
max-jOPS
critical-jOPS
https://kstefanj.github.io/2020/04/16/g1-ootb-performance.html
SPECjbb®1 2015
OOTB
MaxRAM=16GB
15
SPEC® and SPECjbb® are registered trademarks of the Standard Performance Evaluation Corporation (www.spec.org/jbb2015/)
100%
112%
65%
97%100%
137%
90%
210%
0%
20%
40%
60%
80%
100%
120%
140%
160%
180%
200%
220%
JDK 8 Parallel GC JDK 14 Parallel GC JDK 14 G1 JDK 15 G1
G1 GC
■
■
Copyright © 2020, Oracle and/or its affiliates25
Startup Time
0
20
40
60
80
100
120
140
8 9 11 13 14
Hello World
14
Copyright © 2020, Oracle and/or its affiliates26
Startup Time
0
20
40
60
80
100
120
140
160
180
8 9 11 13 14
Hello World Hello Lambda Hello Concat
https://cl4es.github.io
14
Copyright © 2020, Oracle and/or its affiliates27
• Enable flatter and denser memory layouts
• Main impediment to better object layout is object identity
- Enables mutability, layout polymorphism, locking, etc.
- Not all objects need it, but all objects pay for it!
- Hard to dynamically determine at runtime whether identity will be relevant
Project Valhalla
Copyright © 2020, Oracle and/or its affiliates28
• Easier and more scalable concurrency model
• Virtual Threads vs. Kernel Threads
- Making blocking calls virtually free
- Millions of VT can be spawned in a single JVM instance!
Project Loom
Making
concurrency
simple
again
Copyright © 2020, Oracle and/or its affiliates29
• Foreign Function/Data interface
• Simple, safe, and performant replacement for JNI
• Access to low-level hardware functionality through normal Java code
Project Panama
Copyright © 2020, Oracle and/or its affiliates30
• Foreign-Memory Access API - JEP 370 (incubator)
- Allows efficient off-heap memory access from Java
• “Extraction”
- Tool to generate var/method handles from native library
- API to customize the extraction process
• Vector API - JEP 338 (incubator candiate, not targetted yet!)
- Express vector computations that compile at runtime to optimal vector
hardware instructions
• Non-Volatile Mapped Byte Buffers (*) - JEP 352
- Access to non-volatile memory via MappedByteBuffer
Project Panama 14
Copyright © 2020, Oracle and/or its affiliates31
Panama
Copyright © 2020, Oracle and/or its affiliates32
Project Amber
Improve developer productivity through evolutions of the Java language
14
15
Java 10 Java 11 Java 12 Java 13 Java 14 Java 15
Local-Variable Type Inference var Standard
Local-Variable Syntax for Lambda Parameters Standard
Switch Expressions Preview 2nd Preview Standard
Text Blocks Preview 2nd Preview Standard
Records Preview 2nd Preview
Pattern Matching instanceof Preview 2nd Preview
Sealed Classes Preview
More JEPs ?
Copyright © 2020, Oracle and/or its affiliates33
Project Amber - Records JEP 359 (preview) 14
• Provides a compact syntax for declaring classes which are transparent
holders for shallowly immutable data
• Data carrier class with less code ceremony
Copyright © 2020, Oracle and/or its affiliates34
Project Amber - Text Blocks JEP 368 (2nd preview)
String html = """
..............<html>
...................<body>
.....................<p>"Hello world"</p>
..................</body>
..............</html>
..............""";
String html = "<html>n" +
"....<body>n" +
"........<p>"Hello world"</p>n" +
"....</body>n" +
"</html>n";
14
<html>
<body>
<p>"Hello world"</p>
</body>
</html>
Copyright © 2020, Oracle and/or its affiliates35
Project Amber - Pattern Matching with InstanceOf JEP 305 (preview) 14
if (obj instanceof String) {
String s = (String) obj;
// do something with s
}
if (obj instanceof String s) {
// do something with s
}
else {
// can’t use s here!
}
Copyright © 2020, Oracle and/or its affiliates36
Project Amber - Switch Expressions JEP 361 14
switch(day){
case MONDAY:
case FRIDAY:
case SUNDAY:
numberOfChar = 6;
case TUESDAY:
numberOfChar = 7;
break;
case WEDNESDAY:
numberOfChar = 9;
break;
case THURSDAY:
case SATURDAY:
numberOfChar = 8;
break;
default:
throw new IllegalArgumentException…
}
int result = switch (day){
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case WEDNESDAY -> 9;
case THURSDAY, SATURDAY -> 8;
};
Copyright © 2020, Oracle and/or its affiliates37
Amber - Demo
Copyright © 2020, Oracle and/or its affiliates38
Innovating for the Future
ZGC
Create a scalable low
latency garbage collector
capable of handling
large heaps
Panama
Higher performance and
easier development of
I/O intensive applications
through Java-native
platform enhancements
Valhalla
Higher density and
performance of machine
learning and big data
applications through the
introduction of Value Types
Loom
Massively scale
lightweight threads,
making concurrency
simple again
Amber
Continuously improve
developer productivity
through evolutions of
the Java language
Metropolis
Implement more of the
JVM in Java starting
with the JIT complier
“Java-on-Java”
Copyright © 2020, Oracle and/or its affiliates39
Helpful NullPointerExceptions JEP 358 14
java.lang.NullPointerException
at Npe.locate(Npe.java:666)
…
java -XX:+ShowCodeDetailsInExceptionMessages …
java.lang.NullPointerException:
Cannot invoke "location$City.getDistrict()"
because the return value of "Location$Province.getCity()" is null
at Npe.locate(Npe.java:666)
…
location.getCountry().getRegion().getProvince().getCity().getDistrict().getAddress()…666
Copyright © 2020, Oracle and/or its affiliates40
JDK Flight Recorder
• Event based tracing framework built into the JVM
- High performance event recorder
- Very low overhead, designed to be used in production
• Keeps history of tracing data always available
• Allows data from different subsystems and software layers to be
correlated
• Interfaces
- CLI: JVM flags, jfr, jcmd
- GUI: JDK Mission Control
- APIs: Java & JMX
Copyright © 2020, Oracle and/or its affiliates41
JFR Event Streaming JEP 349 14
• Expose JFR data for continuous monitoring
• Stream event data as it is being produced, no need to dump data
to a file
• API for the continuous consumption of events
- In-process and out-of-process
• Low overhead (<1% overhead), safe for production
Copyright © 2020, Oracle and/or its affiliates42
JDK Flight Recorder
JDK 10 125
JDK 11 131
JDK 12 136
JDK 13 143
JDK 14 145
JDK 15 (15-ea+21-975) 157
https://docs.oracle.com/en/java/javase/14/docs/api/jdk.jfr/jdk/jfr/EventType.html
14
• Event Types
15
Copyright © 2020, Oracle and/or its affiliates43
Packaging Tool JEP 343 (incubator) 14
• jpackage
• Give end users a natural, i.e. native, installation experience
- Windows: msi & exe
- macOS: pkg & dmg
- Linux: deb & rpm
• Allows launch-time parameters to be specified at packaging time
• Can be invoked directly, from the command line, or programmatically,
via the ToolProvider API
Copyright © 2020, Oracle and/or its affiliates44
Java 15
https://bugs.openjdk.java.net/secure/Dashboard.jspa?selectPageId=19114
https://openjdk.java.net/projects/jdk/15/spec/
Rampdown Phase One (features freeze)
Rampdown Phase Two
Initial Release Candidate
Final Release Candidate
General Availability
2020/06/11
2020/07/16
2020/08/06
2020/08/20
2020/09/15
15
Copyright © 2020, Oracle and/or its affiliates45
Java 15(*) 15
(*) As of May 12th
Edwards-Curve Digital Signature Algorithm (EdDSA) JEP 339 Proposed to target
Hidden Classes JEP 371 Integrated
Remove the Nashorn JS Engine JEP 372 Integrated
Reimplement the Legacy DatagramSocket API JEP 373 Targeted
Disable and Deprecate Biased Locking JEP 374 Targeted
Pattern Matching for instanceof (2nd preview)
JEP 375 Targeted
ZGC (production) JEP 377 Integrated
Text Block (final)
JEP 378 Integrated
Shenandoah (production) JEP 379 Targeted
Records (2nd preview)
JEP 384 Proposed to target
Copyright © 2020, Oracle and/or its affiliates46
Java 15(*) or later… 15
(*) As of May 12th
https://bugs.openjdk.java.net/secure/Dashboard.jspa?selectPageId=19114
https://openjdk.java.net/projects/jdk/15/spec/
Sealed Classes (preview)
JEP 360 Candidate, not yet targeted
Foreign-Memory Access API (2nd incubator)
JEP 383 Candidate, not yet targeted
Vector API (incubator)
JEP 338 Candidate, not yet targeted
… ?
Copyright © 2020, Oracle and/or its affiliates47
• Dynamically generated classes that cannot be used directly by the
bytecode of other classes
• Targets frameworks
• + Deprecate the sun.misc.Unsafe::defineAnonymousClass API
Hidden Classes JEP 371 15
Copyright © 2020, Oracle and/or its affiliates48
• Dynamically generated classes, only accessible via reflection
• Not-discoverable
- By the JVM during bytecode linkage
- By programs making explicit use of class loaders
• Lifecycle
- Ex. can be unloaded “aggressively”
• Access control
- Can be created as a member of an access control nest
Hidden Classes JEP 371 15
Copyright © 2020, Oracle and/or its affiliates49
Class Hierarchy
• Enables the reuse of code via inheritance
- Methods of a superclass can be inherited by many subclasses
• Sometimes used to model the different possibilities of a domain
- Shapes supported by a graphics library
◦ Square, Hexagon, Circle, Triangle extends Shape
• Java assumes that code reuse is always a goal!
• Solution
- Class hierarchy not open for extension by arbitrary classes
- Code reuse would still be possible within the "closed" class hierarchy
Copyright © 2020, Oracle and/or its affiliates50
Sealed Classes JEP 360 (preview) 15
• Allow a class (or interface) to control which code is responsible for
implementing it
• Provide a more declarative way than access modifiers to restrict the
use of a superclass
• A sealed class/interface can only be extended/implemented by those
classes/interfaces permitted to do so
• New sealed modifier and new permits clause
• Support future directions in pattern matching by underpinning the
exhaustive analysis of patterns
Copyright © 2020, Oracle and/or its affiliates51
Sealed Classes JEP 360 (preview) 15
// same module or same package
package com.draw.geometry;
public sealed class Shape
permits Circle, Rectangle, Square {
...
}
package com.draw.geometry;
public sealed class Shape
permits com.draw.polar.Circle,
com.draw.quad.Rectangle,
com.draw.quad.simple.Square {
...
}
// single file, ‘permits’ inferred
package com.draw.geometry;
sealed class Shape {...}
Circle extends Shape {...}
Rectangle extends Shape {...}
Square extends Shape {...}
Copyright © 2020, Oracle and/or its affiliates52
Wrap-up
Copyright © 2020, Oracle and/or its affiliates53
Innovating for the Future
ZGC
Create a scalable low
latency garbage collector
capable of handling
large heaps
Panama
Higher performance and
easier development of
I/O intensive applications
through Java-native
platform enhancements
Valhalla
Higher density and
performance of machine
learning and big data
applications through the
introduction of Value Types
Loom
Massively scale
lightweight threads,
making concurrency
simple again
Amber
Continuously improve
developer productivity
through evolutions of
the Java language
Metropolis
Implement more of the
JVM in Java starting
with the JIT complier
“Java-on-Java”
Leyden
Address slow startup time,
slow time to peak performance,
and large footprint
Copyright © 2020, Oracle and/or its affiliates54
Java 14 / JDK 14 - 16 JEPs
305 Pattern Matching for instanceof (Preview)
343 Packaging Tool (Incubator)
345 NUMA-Aware Memory Allocation for G1
349 JFR Event Streaming
352 Non-Volatile Mapped Byte Buffers
358 Helpful NullPointerExceptions
359 Records (Preview)
361 Switch Expressions (Standard)
362 Deprecate the Solaris and SPARC Ports
363 Remove the Concurrent Mark Sweep (CMS) Garbage Collector
364 ZGC on macOS
365 ZGC on Windows
366 Deprecate the ParallelScavenge + SerialOld GC Combination
367 Remove the Pack200 Tools and API
368 Text Blocks (Second Preview)
370 Foreign-Memory Access API (Incubator)
Java 14 is available!
https://jdk.java.net/
14
Copyright © 2020, Oracle and/or its affiliates55
Java is still free!
Delivering Faster
Richest Feature Pipeline Ever
https://openjdk.java.net
Copyright © 2020, Oracle and/or its affiliates56
David Delabassée
@delabassee
Thanks!

More Related Content

What's hot (20)

PPTX
JDK 9: The Start of a New Future for Java
Simon Ritter
 
PPTX
Is An Agile Standard Possible For Java?
Simon Ritter
 
PDF
Why should i switch to Java SE 7
Vinay H G
 
PPTX
JDK 9, 10, 11 and Beyond
Simon Ritter
 
PPTX
My Experiences as a Beginner of OpenJDK Contributor (jLove Conference)
NTT DATA Technology & Innovation
 
PPTX
JDK 9: Mission Accomplished. What Next For Java?
Simon Ritter
 
PPTX
Java Webinar #9: “Raspberry Pi Platform for Java Programmers”
GlobalLogic Ukraine
 
PPTX
Java Support: What's changing
Simon Ritter
 
PPTX
Real World Java 9 - JetBrains Webinar
Trisha Gee
 
PPTX
Java Is Still Free
Simon Ritter
 
PDF
Java 9 / Jigsaw - AJUG/VJUG session
Mani Sarkar
 
PDF
Applying Concurrency Cookbook Recipes to SPEC JBB
Monica Beckwith
 
PDF
Jakarta EE 最前線 - Jakarta EEの現在、ロードマップなど
オラクルエンジニア通信
 
PDF
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Andreas Koop
 
PPTX
Modern application development with oracle cloud sangam17
Vinay Kumar
 
PPTX
JDK 9: Migrating Applications
Simon Ritter
 
PDF
Eclipse MicroProfile 과 Microservice Java framework – Helidon
Oracle Korea
 
PDF
Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...
scalaconfjp
 
PDF
times ten in-memory database for extreme performance
Oracle Korea
 
PDF
Java 9 / Jigsaw - LJC / VJUG session (hackday session)
Mani Sarkar
 
JDK 9: The Start of a New Future for Java
Simon Ritter
 
Is An Agile Standard Possible For Java?
Simon Ritter
 
Why should i switch to Java SE 7
Vinay H G
 
JDK 9, 10, 11 and Beyond
Simon Ritter
 
My Experiences as a Beginner of OpenJDK Contributor (jLove Conference)
NTT DATA Technology & Innovation
 
JDK 9: Mission Accomplished. What Next For Java?
Simon Ritter
 
Java Webinar #9: “Raspberry Pi Platform for Java Programmers”
GlobalLogic Ukraine
 
Java Support: What's changing
Simon Ritter
 
Real World Java 9 - JetBrains Webinar
Trisha Gee
 
Java Is Still Free
Simon Ritter
 
Java 9 / Jigsaw - AJUG/VJUG session
Mani Sarkar
 
Applying Concurrency Cookbook Recipes to SPEC JBB
Monica Beckwith
 
Jakarta EE 最前線 - Jakarta EEの現在、ロードマップなど
オラクルエンジニア通信
 
Deployment Best Practices on WebLogic Server (DOAG IMC Summit 2013)
Andreas Koop
 
Modern application development with oracle cloud sangam17
Vinay Kumar
 
JDK 9: Migrating Applications
Simon Ritter
 
Eclipse MicroProfile 과 Microservice Java framework – Helidon
Oracle Korea
 
Run Scala Faster with GraalVM on any Platform / GraalVMで、どこでもScalaを高速実行しよう by...
scalaconfjp
 
times ten in-memory database for extreme performance
Oracle Korea
 
Java 9 / Jigsaw - LJC / VJUG session (hackday session)
Mani Sarkar
 

Similar to Java 40 versions_sgp (20)

PDF
Whats new in Java 9,10,11,12
Rory Preddy
 
PDF
Haj 4344-java se 9 and the application server-1
Kevin Sutter
 
PDF
JDK 9 Java Platform Module System
Wolfgang Weigend
 
PPTX
Java and OpenJDK: disecting the ecosystem
Rafael Winterhalter
 
PDF
Java: Create The Future Keynote
Simon Ritter
 
PPTX
Java dev mar_2021_keynote
Suyash Joshi
 
PDF
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PPTX
Java10 new features 2018
Arjun Bhati
 
PDF
Jozi-JUG JDK 9 Unconference
Heather VanCura
 
PDF
GBDC 勉強会 #6 Java イベントレポート 2016
Yutaka Kato
 
PDF
Deep Dive Java 17 Devoxx UK
José Paumard
 
PDF
TWJUG x Oracle Groundbreakers 2019 Taiwan - What’s New in Last Java Versions
Joseph Kuo
 
PDF
JDK 11
Ilya Lapitan
 
PDF
Summary of JDK10 and What will come into JDK11
なおき きしだ
 
PDF
Beyond JVM - YOW Melbourne 2013
Charles Nutter
 
PPTX
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Владимир Иванов (Oracle): Java: прошлое и будущее
Olga Lavrentieva
 
PDF
JDK 10 Java Module System
Wolfgang Weigend
 
PDF
JVMs in Containers
David Delabassee
 
PDF
De Java 8 a Java 17
Víctor Leonel Orozco López
 
Whats new in Java 9,10,11,12
Rory Preddy
 
Haj 4344-java se 9 and the application server-1
Kevin Sutter
 
JDK 9 Java Platform Module System
Wolfgang Weigend
 
Java and OpenJDK: disecting the ecosystem
Rafael Winterhalter
 
Java: Create The Future Keynote
Simon Ritter
 
Java dev mar_2021_keynote
Suyash Joshi
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Java10 new features 2018
Arjun Bhati
 
Jozi-JUG JDK 9 Unconference
Heather VanCura
 
GBDC 勉強会 #6 Java イベントレポート 2016
Yutaka Kato
 
Deep Dive Java 17 Devoxx UK
José Paumard
 
TWJUG x Oracle Groundbreakers 2019 Taiwan - What’s New in Last Java Versions
Joseph Kuo
 
JDK 11
Ilya Lapitan
 
Summary of JDK10 and What will come into JDK11
なおき きしだ
 
Beyond JVM - YOW Melbourne 2013
Charles Nutter
 
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Владимир Иванов (Oracle): Java: прошлое и будущее
Olga Lavrentieva
 
JDK 10 Java Module System
Wolfgang Weigend
 
JVMs in Containers
David Delabassee
 
De Java 8 a Java 17
Víctor Leonel Orozco López
 
Ad

Recently uploaded (20)

PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PDF
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PPTX
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
PDF
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PDF
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
PPTX
Tally software_Introduction_Presentation
AditiBansal54083
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
Tally software_Introduction_Presentation
AditiBansal54083
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
Ad

Java 40 versions_sgp

  • 1. @delabassee DevRel Java Platform Group Singapore JUG May 2020 David Delabassée Java and the forty versionsJava and the forty versions fourteen
  • 2. The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, timing, and pricing of any features or functionality described for Oracle’s products may change and remains at the sole discretion of Oracle Corporation. Safe harbor statement Copyright © 2020, Oracle and/or its affiliates2
  • 3. Copyright © 2020, Oracle and/or its affiliates3 Developer productivity Application performance In the face of constantly-evolving programming paradigms, application styles, deployment styles and hardware.
  • 4. Copyright © 2020, Oracle and/or its affiliates4 Java 9 / JDK 9 - 90 JEPs 102 Process API Updates 110 HTTP 2 Client 143 Improve Contended Locking 158 Unified JVM Logging 165 Compiler Control 193 Variable Handles 197 Segmented Code Cache 199 Smart Java Compilation, Phase Two 200 The Modular JDK 201 Modular Source Code 211 Elide Deprecation Warnings on Import Stats. 212 Resolve Lint and Doclint Warnings 213 Milling Project Coin 214 Remove GC Combinations Deprecated in JDK 8 215 Tiered Attribution for javac 216 Process Import Statements Correctly 217 Annotations Pipeline 2.0 219 Datagram Transport Layer Security (DTLS) 220 Modular Run-Time Images 221 Simplified Doclet API 222 jshellThe Java Shell (Read-Eval-Print Loop) 223 New Version-String Scheme 224 HTML5 Javadoc 225 Javadoc Search 226 UTF-8 Property Files 227 Unicode 7.0 228 Add More Diagnostic Commands 229 Create PKCS12 Keystores by Default 231 Remove Launch-Time JRE Version Selection 232 Improve Secure Application Performance 233 Generate Run-Time Compiler Tests Automatically 235 Test Class-File Attributes Generated by javac 236 Parser API for Nashorn 237 Linux/AArch64 Port 238 Multi-Release JAR Files 240 Remove the JVM TI hprof Agent 241 Remove the jhat Tool 243 Java-Level JVM Compiler Interface 244 TLS ALPN Extension 245 Validate JVM Command-Line Flag Arguments 246 Leverage CPU Instructions for GHASH and RSA 247 Compile for Older Platform Versions 248 Make G1 the Default Garbage Collector 249 OCSP Stapling for TLS 250 Store Interned Strings in CDS Archives 251 Multi-Resolution Images 252 Use CLDR Locale Data by Default 253 Prepare JavaFX UI Controls & CSS APIs for Modul. 254 Compact Strings 255 Merge Selected Xerces 2.11.0 Updates into JAXP 256 BeanInfo Annotations 257 Update JavaFX/Media to Newer Ver of GStreamer 258 HarfBuzz Font-Layout Engine 259 Stack-Walking API 260 Encapsulate Most Internal APIs 261 Module System 262 TIFF Image I/O 263 HiDPI Graphics on Windows and Linux 264 Platform Logging API and Service 265 Marlin Graphics Renderer 266 More Concurrency Updates 267 Unicode 8.0 268 XML Catalogs 269 Convenience Factory Methods for Collections 270 Reserved Stack Areas for Critical Sections 271 Unified GC Logging 272 Platform-Specific Desktop Features 273 DRBG-Based SecureRandom Implementations 274 Enhanced Method Handles 275 Modular Java Application Packaging 276 Dynamic Link of Language-Def. Object Models 277 Enhanced Deprecation 278 Additional Tests for Humongous Objs in G1 279 Improve Test-Failure Troubleshooting 280 Indify String Concatenation 281 HotSpot C++ Unit-Test Framework 282 jlinkThe Java Linker 283 Enable GTK 3 on Linux 284 New HotSpot Build System 285 Spin-Wait Hints 287 SHA-3 Hash Algorithms 288 Disable SHA-1 Certificates 289 Deprecate the Applet API 290 Filter Incoming Serialization Data 291 Deprecate the Concurrent Mark Sweep GC 292 Implement Selected ES6 Features in Nashorn 294 Linux/s390x Port 295 Ahead-of-Time Compilation 297 Unified arm32/arm64 Port 298 Remove Demos and Samples 299 Reorganize Documentation
  • 5. Copyright © 2020, Oracle and/or its affiliates5 2017 2018 2019 2020 2021 2022 2023 2024 9 10 11 12 13 14 15 16 17 18 19 11 17
  • 6. Copyright © 2020, Oracle and/or its affiliates6 Oracle offers users choice https://oracle.com/java https://jdk.java.net
  • 7. Copyright © 2020, Oracle and/or its affiliates7 Issues fixed in JDK 14 per organization https://blogs.oracle.com/java-platform-group/the-arrival-of-java-14
  • 8. Copyright © 2020, Oracle and/or its affiliates8 Java is still free!
  • 9. Copyright © 2020, Oracle and/or its affiliates9 • Predictable release cadence • JEPs - https://openjdk.java.net/jeps • Feedback - Preview features, experimental features, incubator modules + EA JDK builds • Project Skara - Investigate alternative SCM and code review options for OpenJDK - Git, hosted Git provider & tooling - Already moved - Amber, Skara, jfx, jmc, Loom, Panama-foreign, … + R/O mirrors - https://github.com/openjdk/ Foster Faster Innovations
  • 10. Copyright © 2020, Oracle and/or its affiliates10 Java is still free! Delivering Faster
  • 11. Copyright © 2020, Oracle and/or its affiliates11 Java 10 (March 2018) 12 JEPs 286 Local-Variable Type Inference 296 Consolidate the JDK Forest into a Single Repository 304 Garbage-Collector Interface 307 Parallel Full GC for G1 310 Application Class-Data Sharing 312 Thread-Local Handshakes 313 Remove the Native-Header Generation Tool (javah) 314 Additional Unicode Language-Tag Extensions 316 Heap Allocation on Alternative Memory Devices 317 Experimental Java-Based JIT Compiler 319 Root Certificates 322 Time-Based Release Versioning
  • 12. Copyright © 2020, Oracle and/or its affiliates12 Java 11 (September 2018) 17 JEPs 181 Nest-Based Access Control 309 Dynamic Class-File Constants 315 Improve Aarch64 Intrinsics 318 Epsilon: A No-Op Garbage Collector (Experimental) 320 Remove the Java EE and CORBA Modules 321 HTTP Client (Standard) 323 Local-Variable Syntax for Lambda Parameters 324 Key Agreement with Curve25519 and Curve448 327 Unicode 10 328 Flight Recorder 329 ChaCha20 and Poly1305 Cryptographic Algorithms 330 Launch Single-File Source-Code Programs 331 Low-Overhead Heap Profiling 332 Transport Layer Security (TLS) 1.3 333 ZGC: A Scalable Low-Latency Garbage Collector (Experimental) 335 Deprecate the Nashorn JavaScript Engine 336 Deprecate the Pack200 Tools and API
  • 13. Copyright © 2020, Oracle and/or its affiliates13 Java 12 (March 2019) 8 JEPs 189 Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) 230 Microbenchmark Suite 325 Switch Expressions (Preview) 334 JVM Constants API 340 One AArch64 Port, Not Two 341 Default CDS Archives 344 Abortable Mixed Collections for G1 346 Promptly Return Unused Committed Memory from G1
  • 14. Copyright © 2020, Oracle and/or its affiliates14 Java 13 (September 2019) 5 JEPs 350 Dynamic CDS Archives 351 ZGC: Uncommit Unused Memory 353 Reimplement the Legacy Socket API 354 Switch Expressions (Preview) 355 Text Blocks (Preview)
  • 15. Copyright © 2020, Oracle and/or its affiliates15 Java 14 (March 2020) 16 JEPs 305 Pattern Matching for instanceof (Preview) 343 Packaging Tool (Incubator) 345 NUMA-Aware Memory Allocation for G1 349 JFR Event Streaming 352 Non-Volatile Mapped Byte Buffers 358 Helpful NullPointerExceptions 359 Records (Preview) 361 Switch Expressions (Standard) 362 Deprecate the Solaris and SPARC Ports 363 Remove the Concurrent Mark Sweep (CMS) Garbage Collector 364 ZGC on macOS 365 ZGC on Windows 366 Deprecate the ParallelScavenge + SerialOld GC Combination 367 Remove the Pack200 Tools and API 368 Text Blocks (Second Preview) 370 Foreign-Memory Access API (Incubator) 14
  • 16. Copyright © 2020, Oracle and/or its affiliates16 Java 15 https://bugs.openjdk.java.net/secure/Dashboard.jspa?selectPageId=19114 https://openjdk.java.net/projects/jdk/15/spec/ Rampdown Phase One (features freeze) Rampdown Phase Two Initial Release Candidate Final Release Candidate General Availability 2020/06/11 2020/07/16 2020/08/06 2020/08/20 2020/09/15 15
  • 17. Copyright © 2020, Oracle and/or its affiliates17 Java is still free! Delivering Faster Richest Feature Pipeline Ever
  • 18. Copyright © 2020, Oracle and/or its affiliates18 Innovating for the Future ZGC Create a scalable low latency garbage collector capable of handling large heaps Panama Higher performance and easier development of I/O intensive applications through Java-native platform enhancements Valhalla Higher density and performance of machine learning and big data applications through the introduction of Value Types Loom Massively scale lightweight threads, making concurrency simple again Amber Continuously improve developer productivity through evolutions of the Java language Metropolis Implement more of the JVM in Java starting with the JIT complier “Java-on-Java”
  • 19. Copyright © 2020, Oracle and/or its affiliates19 • A Scalable Low Latency GC - Low Latency ⇨ pause times stay below 10 ms, typically within 2 ms - Scalable ⇨ pause times do not increase with the heap or live-set size - Handle heaps ranging from a few megabytes to multi terabytes in size • Use - -XX:+UnlockExperimentalVMOption -XX:+UseZGC • And tune - -Xmx<size> Zero GC
  • 20. Copyright © 2020, Oracle and/or its affiliates20 • JDK 11 - Initial ZGC support on Linux (experimental) (JEP 333) • JDK 12 - Support for concurrent class unloading, further pause time reduction • JDK 13 - Linux/AArch64 support, max heap size increased to 16TB • JDK 14 - MacOS (JEP 364) & Windows (JEP 365) support, JFR leak profiler, tiny heaps, … • JDK 15 - Production! (JEP 377) Zero GC https://wiki.openjdk.java.net/display/zgc/Main 14 15
  • 21. Copyright © 2020, Oracle and/or its affiliates21 Zero GC https://www.jfokus.se/jfokus20-preso/OpenJDK-in-the-new-age-of-GC.pdf
  • 22. 22 G1 GC 14 0 1 2 3 4 5 JDK 8 JDK 11 JDK 14 • NUMA-Aware Memory Allocation for G1 - JEP 345 • ∼ 700 enhancements since JDK 8, across all areas! - Across all areas ⇨ significant improvements • Ex. Native memory usage over time (GB) - BigRamTester, w. 16GB heap JDK 8 JDK 11 JDK 14 Copyright © 2020, Oracle and/or its affiliates
  • 23. Copyright © 2020, Oracle and/or its affiliates23 G1 GC Normalized Scores Higher is Better max-jOPS critical-jOPS ■ ■ https://kstefanj.github.io/2020/04/16/g1-ootb-performance.html 100% 113% 95% 100% 150% 229% 0% 20% 40% 60% 80% 100% 120% 140% 160% 180% 200% 220% 240% JDK 8 Parallel GC JDK 14 Parallel GC JDK 14 G1 -Xmx4g -Xms4g SPECjbb®1 2015 OOTB - Fixed heap 14 SPEC® and SPECjbb® are registered trademarks of the Standard Performance Evaluation Corporation (www.spec.org/jbb2015/)
  • 24. Copyright © 2020, Oracle and/or its affiliates24 Normalized Scores Higher is Better max-jOPS critical-jOPS https://kstefanj.github.io/2020/04/16/g1-ootb-performance.html SPECjbb®1 2015 OOTB MaxRAM=16GB 15 SPEC® and SPECjbb® are registered trademarks of the Standard Performance Evaluation Corporation (www.spec.org/jbb2015/) 100% 112% 65% 97%100% 137% 90% 210% 0% 20% 40% 60% 80% 100% 120% 140% 160% 180% 200% 220% JDK 8 Parallel GC JDK 14 Parallel GC JDK 14 G1 JDK 15 G1 G1 GC ■ ■
  • 25. Copyright © 2020, Oracle and/or its affiliates25 Startup Time 0 20 40 60 80 100 120 140 8 9 11 13 14 Hello World 14
  • 26. Copyright © 2020, Oracle and/or its affiliates26 Startup Time 0 20 40 60 80 100 120 140 160 180 8 9 11 13 14 Hello World Hello Lambda Hello Concat https://cl4es.github.io 14
  • 27. Copyright © 2020, Oracle and/or its affiliates27 • Enable flatter and denser memory layouts • Main impediment to better object layout is object identity - Enables mutability, layout polymorphism, locking, etc. - Not all objects need it, but all objects pay for it! - Hard to dynamically determine at runtime whether identity will be relevant Project Valhalla
  • 28. Copyright © 2020, Oracle and/or its affiliates28 • Easier and more scalable concurrency model • Virtual Threads vs. Kernel Threads - Making blocking calls virtually free - Millions of VT can be spawned in a single JVM instance! Project Loom Making concurrency simple again
  • 29. Copyright © 2020, Oracle and/or its affiliates29 • Foreign Function/Data interface • Simple, safe, and performant replacement for JNI • Access to low-level hardware functionality through normal Java code Project Panama
  • 30. Copyright © 2020, Oracle and/or its affiliates30 • Foreign-Memory Access API - JEP 370 (incubator) - Allows efficient off-heap memory access from Java • “Extraction” - Tool to generate var/method handles from native library - API to customize the extraction process • Vector API - JEP 338 (incubator candiate, not targetted yet!) - Express vector computations that compile at runtime to optimal vector hardware instructions • Non-Volatile Mapped Byte Buffers (*) - JEP 352 - Access to non-volatile memory via MappedByteBuffer Project Panama 14
  • 31. Copyright © 2020, Oracle and/or its affiliates31 Panama
  • 32. Copyright © 2020, Oracle and/or its affiliates32 Project Amber Improve developer productivity through evolutions of the Java language 14 15 Java 10 Java 11 Java 12 Java 13 Java 14 Java 15 Local-Variable Type Inference var Standard Local-Variable Syntax for Lambda Parameters Standard Switch Expressions Preview 2nd Preview Standard Text Blocks Preview 2nd Preview Standard Records Preview 2nd Preview Pattern Matching instanceof Preview 2nd Preview Sealed Classes Preview More JEPs ?
  • 33. Copyright © 2020, Oracle and/or its affiliates33 Project Amber - Records JEP 359 (preview) 14 • Provides a compact syntax for declaring classes which are transparent holders for shallowly immutable data • Data carrier class with less code ceremony
  • 34. Copyright © 2020, Oracle and/or its affiliates34 Project Amber - Text Blocks JEP 368 (2nd preview) String html = """ ..............<html> ...................<body> .....................<p>"Hello world"</p> ..................</body> ..............</html> .............."""; String html = "<html>n" + "....<body>n" + "........<p>"Hello world"</p>n" + "....</body>n" + "</html>n"; 14 <html> <body> <p>"Hello world"</p> </body> </html>
  • 35. Copyright © 2020, Oracle and/or its affiliates35 Project Amber - Pattern Matching with InstanceOf JEP 305 (preview) 14 if (obj instanceof String) { String s = (String) obj; // do something with s } if (obj instanceof String s) { // do something with s } else { // can’t use s here! }
  • 36. Copyright © 2020, Oracle and/or its affiliates36 Project Amber - Switch Expressions JEP 361 14 switch(day){ case MONDAY: case FRIDAY: case SUNDAY: numberOfChar = 6; case TUESDAY: numberOfChar = 7; break; case WEDNESDAY: numberOfChar = 9; break; case THURSDAY: case SATURDAY: numberOfChar = 8; break; default: throw new IllegalArgumentException… } int result = switch (day){ case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; case WEDNESDAY -> 9; case THURSDAY, SATURDAY -> 8; };
  • 37. Copyright © 2020, Oracle and/or its affiliates37 Amber - Demo
  • 38. Copyright © 2020, Oracle and/or its affiliates38 Innovating for the Future ZGC Create a scalable low latency garbage collector capable of handling large heaps Panama Higher performance and easier development of I/O intensive applications through Java-native platform enhancements Valhalla Higher density and performance of machine learning and big data applications through the introduction of Value Types Loom Massively scale lightweight threads, making concurrency simple again Amber Continuously improve developer productivity through evolutions of the Java language Metropolis Implement more of the JVM in Java starting with the JIT complier “Java-on-Java”
  • 39. Copyright © 2020, Oracle and/or its affiliates39 Helpful NullPointerExceptions JEP 358 14 java.lang.NullPointerException at Npe.locate(Npe.java:666) … java -XX:+ShowCodeDetailsInExceptionMessages … java.lang.NullPointerException: Cannot invoke "location$City.getDistrict()" because the return value of "Location$Province.getCity()" is null at Npe.locate(Npe.java:666) … location.getCountry().getRegion().getProvince().getCity().getDistrict().getAddress()…666
  • 40. Copyright © 2020, Oracle and/or its affiliates40 JDK Flight Recorder • Event based tracing framework built into the JVM - High performance event recorder - Very low overhead, designed to be used in production • Keeps history of tracing data always available • Allows data from different subsystems and software layers to be correlated • Interfaces - CLI: JVM flags, jfr, jcmd - GUI: JDK Mission Control - APIs: Java & JMX
  • 41. Copyright © 2020, Oracle and/or its affiliates41 JFR Event Streaming JEP 349 14 • Expose JFR data for continuous monitoring • Stream event data as it is being produced, no need to dump data to a file • API for the continuous consumption of events - In-process and out-of-process • Low overhead (<1% overhead), safe for production
  • 42. Copyright © 2020, Oracle and/or its affiliates42 JDK Flight Recorder JDK 10 125 JDK 11 131 JDK 12 136 JDK 13 143 JDK 14 145 JDK 15 (15-ea+21-975) 157 https://docs.oracle.com/en/java/javase/14/docs/api/jdk.jfr/jdk/jfr/EventType.html 14 • Event Types 15
  • 43. Copyright © 2020, Oracle and/or its affiliates43 Packaging Tool JEP 343 (incubator) 14 • jpackage • Give end users a natural, i.e. native, installation experience - Windows: msi & exe - macOS: pkg & dmg - Linux: deb & rpm • Allows launch-time parameters to be specified at packaging time • Can be invoked directly, from the command line, or programmatically, via the ToolProvider API
  • 44. Copyright © 2020, Oracle and/or its affiliates44 Java 15 https://bugs.openjdk.java.net/secure/Dashboard.jspa?selectPageId=19114 https://openjdk.java.net/projects/jdk/15/spec/ Rampdown Phase One (features freeze) Rampdown Phase Two Initial Release Candidate Final Release Candidate General Availability 2020/06/11 2020/07/16 2020/08/06 2020/08/20 2020/09/15 15
  • 45. Copyright © 2020, Oracle and/or its affiliates45 Java 15(*) 15 (*) As of May 12th Edwards-Curve Digital Signature Algorithm (EdDSA) JEP 339 Proposed to target Hidden Classes JEP 371 Integrated Remove the Nashorn JS Engine JEP 372 Integrated Reimplement the Legacy DatagramSocket API JEP 373 Targeted Disable and Deprecate Biased Locking JEP 374 Targeted Pattern Matching for instanceof (2nd preview) JEP 375 Targeted ZGC (production) JEP 377 Integrated Text Block (final) JEP 378 Integrated Shenandoah (production) JEP 379 Targeted Records (2nd preview) JEP 384 Proposed to target
  • 46. Copyright © 2020, Oracle and/or its affiliates46 Java 15(*) or later… 15 (*) As of May 12th https://bugs.openjdk.java.net/secure/Dashboard.jspa?selectPageId=19114 https://openjdk.java.net/projects/jdk/15/spec/ Sealed Classes (preview) JEP 360 Candidate, not yet targeted Foreign-Memory Access API (2nd incubator) JEP 383 Candidate, not yet targeted Vector API (incubator) JEP 338 Candidate, not yet targeted … ?
  • 47. Copyright © 2020, Oracle and/or its affiliates47 • Dynamically generated classes that cannot be used directly by the bytecode of other classes • Targets frameworks • + Deprecate the sun.misc.Unsafe::defineAnonymousClass API Hidden Classes JEP 371 15
  • 48. Copyright © 2020, Oracle and/or its affiliates48 • Dynamically generated classes, only accessible via reflection • Not-discoverable - By the JVM during bytecode linkage - By programs making explicit use of class loaders • Lifecycle - Ex. can be unloaded “aggressively” • Access control - Can be created as a member of an access control nest Hidden Classes JEP 371 15
  • 49. Copyright © 2020, Oracle and/or its affiliates49 Class Hierarchy • Enables the reuse of code via inheritance - Methods of a superclass can be inherited by many subclasses • Sometimes used to model the different possibilities of a domain - Shapes supported by a graphics library ◦ Square, Hexagon, Circle, Triangle extends Shape • Java assumes that code reuse is always a goal! • Solution - Class hierarchy not open for extension by arbitrary classes - Code reuse would still be possible within the "closed" class hierarchy
  • 50. Copyright © 2020, Oracle and/or its affiliates50 Sealed Classes JEP 360 (preview) 15 • Allow a class (or interface) to control which code is responsible for implementing it • Provide a more declarative way than access modifiers to restrict the use of a superclass • A sealed class/interface can only be extended/implemented by those classes/interfaces permitted to do so • New sealed modifier and new permits clause • Support future directions in pattern matching by underpinning the exhaustive analysis of patterns
  • 51. Copyright © 2020, Oracle and/or its affiliates51 Sealed Classes JEP 360 (preview) 15 // same module or same package package com.draw.geometry; public sealed class Shape permits Circle, Rectangle, Square { ... } package com.draw.geometry; public sealed class Shape permits com.draw.polar.Circle, com.draw.quad.Rectangle, com.draw.quad.simple.Square { ... } // single file, ‘permits’ inferred package com.draw.geometry; sealed class Shape {...} Circle extends Shape {...} Rectangle extends Shape {...} Square extends Shape {...}
  • 52. Copyright © 2020, Oracle and/or its affiliates52 Wrap-up
  • 53. Copyright © 2020, Oracle and/or its affiliates53 Innovating for the Future ZGC Create a scalable low latency garbage collector capable of handling large heaps Panama Higher performance and easier development of I/O intensive applications through Java-native platform enhancements Valhalla Higher density and performance of machine learning and big data applications through the introduction of Value Types Loom Massively scale lightweight threads, making concurrency simple again Amber Continuously improve developer productivity through evolutions of the Java language Metropolis Implement more of the JVM in Java starting with the JIT complier “Java-on-Java” Leyden Address slow startup time, slow time to peak performance, and large footprint
  • 54. Copyright © 2020, Oracle and/or its affiliates54 Java 14 / JDK 14 - 16 JEPs 305 Pattern Matching for instanceof (Preview) 343 Packaging Tool (Incubator) 345 NUMA-Aware Memory Allocation for G1 349 JFR Event Streaming 352 Non-Volatile Mapped Byte Buffers 358 Helpful NullPointerExceptions 359 Records (Preview) 361 Switch Expressions (Standard) 362 Deprecate the Solaris and SPARC Ports 363 Remove the Concurrent Mark Sweep (CMS) Garbage Collector 364 ZGC on macOS 365 ZGC on Windows 366 Deprecate the ParallelScavenge + SerialOld GC Combination 367 Remove the Pack200 Tools and API 368 Text Blocks (Second Preview) 370 Foreign-Memory Access API (Incubator) Java 14 is available! https://jdk.java.net/ 14
  • 55. Copyright © 2020, Oracle and/or its affiliates55 Java is still free! Delivering Faster Richest Feature Pipeline Ever https://openjdk.java.net
  • 56. Copyright © 2020, Oracle and/or its affiliates56 David Delabassée @delabassee Thanks!