SlideShare a Scribd company logo
1 of 73
Download to read offline
Copyright © 2020 Oracle and/or its affiliates.
It's a JDK-Jungle out there -
JDK 15 and OpenJDK 15
Wolfgang Weigend
Master Principal Solution Engineer | global Java Team
Java Technology & GraalVM and Architecture
Safe Harbor Statement
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, and timing of any features or
functionality described for Oracle’s products remains at the sole discretion of Oracle.
Agenda
Java Version Numbers & Release Cycle
OpenJDK & Oracle OpenJDK Builds
JDK 14 & JDK 15 Features
Java SE Roadmap & Java SE Subscription
JDK 15 Migration Guide
Beyond JDK 15
Summary
1
2
3
4
5
6
7
Java History Milestones
Copyright © 2020, Oracle and/or its affiliates. All rights reserved.
Java initiated as
research project
at Sun
Java powers the
web; bundled
with the
Netscape
browser
Java becomes #1
programming language
for enterprise
applications
Sun open
sources Java
1991 1995 1999 2006
Java 7 –
extending JVM
to dynamic
programming
languages
Java 9 –
modular Java
Java 14 and Java 15
2011 2017 2020
Oracle acquires Sun
2009
Java 10 –
start of
predictable
release cadence
2018
 Rules for Java CPU’s
 Main release for security vulnerabilities
 Covers all JDK families (15, 14, 13, 12, 11, 8, 7, 6)
 CPU release triggers Auto-update
 Dates published 12 months in advance
 Security Alerts are released as necessary
 Based off the previous (non-CPU) release
 Released simultaneously on java.com and OTN
 JDK 15.0.1 - Security Baselines
JRE Family Version
JRE Security Baseline
(Full Version String)
14 14.0.2
13 13.0.2
12 12.0.2
11 11.0.9+7
10 10.0.2
9 9.0.4
8 1.8.0_271-b09
7 1.7.0_281-b06
6 1.6.0_221
JDK Version Numbers and JavaJDK Version Numbers and JavaJDK Version Numbers and JavaJDK Version Numbers and Java Critical Patch UpdatesCritical Patch UpdatesCritical Patch UpdatesCritical Patch Updates
 $FEATURE -- formerly $MAJOR
 $INTERIM -- formerly $MINOR
 $UPDATE -- formerly $SECURITY
 $EMERG -- The emergency-release counter, to produce an
emergency release to fix an urgent security issue.
 $FEATURE.$INTERIM.$UPDATE.$EMERG
Difference between Oracle OpenJDK & Oracle JDK with Java SE 8 ..
and the change since Oracle JDK 11
• Java SE 8
• Security
• Performance
• Support
• Since Oracle JDK 11 it‘s technically interchangeable
• Security
• Performance
• Support only with Oracle JDK
JDK 6 Month Release Cadence
Option to use Oracle JDK or Oracle OpenJDK
Targeted JEP’s per JDK Release
Issues fixed in JDK 14 per organization
https://blogs.oracle.com/javahttps://blogs.oracle.com/javahttps://blogs.oracle.com/javahttps://blogs.oracle.com/java----platformplatformplatformplatform----group/thegroup/thegroup/thegroup/the----arrivalarrivalarrivalarrival----ofofofof----javajavajavajava----14141414
• JDK BUG System commitsJDK BUG System commitsJDK BUG System commitsJDK BUG System commits
• OverallOverallOverallOverall 1986198619861986 JIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDK 14141414
• 1458145814581458 issues were completed by Oracleissues were completed by Oracleissues were completed by Oracleissues were completed by Oracle
• 528528528528 issues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizations
Issues fixed in JDK 15 per organization
https://https://https://https://blogs.oracle.com/javablogs.oracle.com/javablogs.oracle.com/javablogs.oracle.com/java----platformplatformplatformplatform----group/thegroup/thegroup/thegroup/the----arrivalarrivalarrivalarrival----ofofofof----javajavajavajava----15151515
• JDK BUG System commitsJDK BUG System commitsJDK BUG System commitsJDK BUG System commits
• OverallOverallOverallOverall 2136213621362136 JIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDK 15151515
• 1702170217021702 issues were completed by Oracleissues were completed by Oracleissues were completed by Oracleissues were completed by Oracle
• 434434434434 issues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizations
OpenJDK
OpenJDK Project
• Open source implementation of Java SE
• Licensed under GPLv2 with classpath exception
• Reference implementation for Java SE 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ..
• Different vendors/implementers working in common space
– Oracle, IBM, Intel, Twitter, Azul, Google, RedHat, SAP
• Many Java SE related projects
Oracle Contributor Agreement - OCTLA Signatories List
• The following organizations and individuals have signed the OpenJDK Community
TCK License Agreement (OCTLA) and been granted access to the JCK
– Signatories for Java SE 9, or later
• Amazon.com Services, Inc.
• Ampere Computing LLC
• Azul Systems, Inc.
• BellSoft
• Canonical
• Fujitsu Technology Solutions GmbH
• J-Class Solutions, Inc.
• London Jamocha Community
• Loongson Technology Co., Ltd.
• Marvell Semiconductor Inc.
• MicroDoc Software GmbH
• Red Hat
• Sage Embedded Software LLC
• SAP
• SUSE Linux GmbH
• Twitter
• Waratek Limited
http://openjdk.java.net/groups/conformance/JckAccess/jck-access.html
OpenJDK and Java Ownership
• Java is a registered trademark of Oracle
– OpenJDK is named idependently
– Access to the Technology Compatibility Kit (TCK) is restricted
• TCK access requires to sign the OpenJDK Community TCK License Agreement (OCTLA)
– OpenJDK or substantially projects only
– OCTLA did not allow to disclose TCK information to Non-OCTLA licensees
• OCTLA is not a trademark license
• OpenJDK could be used according to the OpenJDK Trademark Notice
– http://openjdk.java.net/legal/openjdk-trademark-notice.html
OpenJDK Infrastructure
• OpenJDK homepage
• Mercurial repositories
– Forests of nested sub-repositories
• Mailing lists
• JDK Bug System
– https://bugs.openjdk.java.net
• Code review server cr.openjdk.java.net
– Review requests in Webrev format
– Access only for Author or higher roles
• OpenJDK Wiki for group member only to get write access
OpenJDK Bug Reporting
• Bug should be reproduced with the latest builds
• Debug build is appropriate
• Simple test case desirable (Jtreg test, ..)
• JDK Bug System search for similar bugs
– Public visible bugs
– Invisible bugs like security bugs and customer bugs
• Non-Authors bug submit only with Java Bug Database and temp bug ID
– https://bugs.java.com/
• Use to write directly to the mailing list for simple reproducible bugs
OpenJDK Tools - Mercurial
• Mercurial is a distributed source control system implemented in Python
• OpenJDK uses nested sub-repositories, i.e. forest:
– to clone them manually, like corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn
$ hg clone http://hg.openjdk.java.net/jdk9/dev jdk9-dev
$ cd jdk9-dev
$ hg clone http://hg.openjdk.java.net/jdk9/dev/hotspot
$ hg clone http://hg.openjdk.java.net/jdk9/dev/nashorn
– or use the get_source.sh script which does the same in parallel
$ hg clone http://hg.openjdk.java.net/jdk9/dev jdk9-dev
$ cd jdk9-dev
$ sh get_source.sh
• Use common/bin/hgforest.sh to execute hg commands in all repositories
• Oracle's OpenJDK JDK binaries for Windows, macOS, and Linux are available
on release-specific pages of jdk.java.net as .tar.gz or .zip archives.
• As an example, the archives for JDK 15 may be found on jdk.java.net/15
and may be extracted on the command line using
– $ tar xvf openjdk-15*_bin.tar.gz
or
– $ unzip openjdk-15*_bin.zip
depending on the archive type.
Download and install prebuilt OpenJDK 15 packages
https://openjdk.java.net/install/
• This page provides production-ready open-source builds of the Java Development Kit, version 15, an implementation of
the Java SE 15 Platform under the GNU General Public License, version 2, with the Classpath Exception.
• Commercial builds of JDK 15 from Oracle, under a non-open-source license, can be found at the Oracle Technology
Network.
• Documentation
– Features
– Release notes
– API Javadoc
– Tool & command reference
• Builds
– Linux / AArch64 tar.gz (sha256) 170467678
– Linux / x64 tar.gz (sha256) 195313679
– macOS / x64 tar.gz (sha256) 192743279
– Windows / x64 zip (sha256) 195901213
JDK 15 General-Availability Release
https://jdk.java.net/15/
JDK 16 Early-Access Builds
https://jdk.java.net/16/
JDK 14 Features
JDK 14 Standard and Preview Features
$ javac HelloWorld.java //////// Do not enable any preview featuresDo not enable any preview featuresDo not enable any preview featuresDo not enable any preview features
$ javac --release 14 --enable-preview HelloWorld.java //////// Enable all preview features of JDK 14Enable all preview features of JDK 14Enable all preview features of JDK 14Enable all preview features of JDK 14
$ java --enable-preview HelloWorld //////// Run with preview features of JDKRun with preview features of JDKRun with preview features of JDKRun with preview features of JDK 14141414
$ javac --release 14 --enable-preview HelloWolfgang.java
$ java HelloWolfgang
Error: LinkageError occurred while loading main class HelloWolfgang
java.lang.UnsupportedClassVersionError: Preview features are not enabled for
HelloWolfgang (class file version 58.65535). Try running with '--enable-preview'
$ java --enable-preview HelloWolfgang
Hello Wolfgang!
Date today = 2020-04-14
Time now = 20:57:07.180454400
Copyright © 2020 Oracle and/or its affiliates.
JDK 14 – Features – JEP’s
• 305:305:305:305: Pattern Matching forPattern Matching forPattern Matching forPattern Matching for instanceofinstanceofinstanceofinstanceof (Preview)(Preview)(Preview)(Preview)
• 343343343343:::: Packaging Tool (Incubator)Packaging Tool (Incubator)Packaging Tool (Incubator)Packaging Tool (Incubator)
• 345:345:345:345: NUMANUMANUMANUMA----Aware Memory Allocation for G1Aware Memory Allocation for G1Aware Memory Allocation for G1Aware Memory Allocation for G1
• 349:349:349:349: JFR Event StreamingJFR Event StreamingJFR Event StreamingJFR Event Streaming
• 352:352:352:352: NonNonNonNon----Volatile Mapped Byte BuffersVolatile Mapped Byte BuffersVolatile Mapped Byte BuffersVolatile Mapped Byte Buffers
• 358:358:358:358: HelpfulHelpfulHelpfulHelpful NullPointerExceptionsNullPointerExceptionsNullPointerExceptionsNullPointerExceptions
• 359:359:359:359: Records (Preview)Records (Preview)Records (Preview)Records (Preview)
• 361:361:361:361: Switch Expressions (Standard)Switch Expressions (Standard)Switch Expressions (Standard)Switch Expressions (Standard)
• 362:362:362:362: Deprecate the Solaris and SPARC PortsDeprecate the Solaris and SPARC PortsDeprecate the Solaris and SPARC PortsDeprecate the Solaris and SPARC Ports
• 363:363:363:363: Remove the Concurrent Mark Sweep (CMS) Garbage CollectorRemove the Concurrent Mark Sweep (CMS) Garbage CollectorRemove the Concurrent Mark Sweep (CMS) Garbage CollectorRemove the Concurrent Mark Sweep (CMS) Garbage Collector
• 364:364:364:364: ZGC onZGC onZGC onZGC on macOSmacOSmacOSmacOS
• 365:365:365:365: ZGC on WindowsZGC on WindowsZGC on WindowsZGC on Windows
• 366:366:366:366: Deprecate theDeprecate theDeprecate theDeprecate the ParallelScavengeParallelScavengeParallelScavengeParallelScavenge ++++ SerialOldSerialOldSerialOldSerialOld GC CombinationGC CombinationGC CombinationGC Combination
• 367:367:367:367: Remove the Pack200 Tools and APIRemove the Pack200 Tools and APIRemove the Pack200 Tools and APIRemove the Pack200 Tools and API
• 368:368:368:368: Text Blocks (Second Preview)Text Blocks (Second Preview)Text Blocks (Second Preview)Text Blocks (Second Preview)
• 370:370:370:370: ForeignForeignForeignForeign----Memory Access API (Incubator)Memory Access API (Incubator)Memory Access API (Incubator)Memory Access API (Incubator)
https://openjdk.java.net/projects/jdk/14/
JEP 359: Records (Preview)
• RecordsRecordsRecordsRecords provide a compact syntax for declaring classesprovide a compact syntax for declaring classesprovide a compact syntax for declaring classesprovide a compact syntax for declaring classes that are nothing more, orthat are nothing more, orthat are nothing more, orthat are nothing more, or
mostly, plain carriers that serves as simple aggregatesmostly, plain carriers that serves as simple aggregatesmostly, plain carriers that serves as simple aggregatesmostly, plain carriers that serves as simple aggregates
• Example:Example:Example:Example: record Point(int x, int y) { }
• Records acquire many standard members automaticalyRecords acquire many standard members automaticalyRecords acquire many standard members automaticalyRecords acquire many standard members automaticaly
• A private final field for each componentA private final field for each componentA private final field for each componentA private final field for each component
• A public read accessor for each componentA public read accessor for each componentA public read accessor for each componentA public read accessor for each component
• A public constructorA public constructorA public constructorA public constructor
• Implementations or equals, hashCode and toStringImplementations or equals, hashCode and toStringImplementations or equals, hashCode and toStringImplementations or equals, hashCode and toString
• Replacement of data class with „records“Replacement of data class with „records“Replacement of data class with „records“Replacement of data class with „records“
• Records as a “simpleRecords as a “simpleRecords as a “simpleRecords as a “simple datadatadatadata encapsulation”encapsulation”encapsulation”encapsulation”
• “Records“Records“Records“Records are serialized differently than ordinary serializable orare serialized differently than ordinary serializable orare serialized differently than ordinary serializable orare serialized differently than ordinary serializable or externalizableexternalizableexternalizableexternalizable objects.objects.objects.objects.
The serialized form of a record object is a sequence of values derived from theThe serialized form of a record object is a sequence of values derived from theThe serialized form of a record object is a sequence of values derived from theThe serialized form of a record object is a sequence of values derived from the
recordrecordrecordrecord componentscomponentscomponentscomponents.”.”.”.”httpshttpshttpshttps://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/ObjectInputStream.html#record://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/ObjectInputStream.html#record://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/ObjectInputStream.html#record://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/ObjectInputStream.html#record----serializationserializationserializationserialization
https://openjdk.java.net/jeps/359
JEP359: Records (Preview)
GrammarGrammarGrammarGrammar
RecordDeclaration:
{ClassModifier} record TypeIdentifier [TypeParameters]
(RecordComponents) [SuperInterfaces] [RecordBody]
RecordComponents:
{RecordComponent {, RecordComponent}}
RecordComponent:
{Annotation} UnannType Identifier
RecordBody:
{ {RecordBodyDeclaration} }
RecordBodyDeclaration:
ClassBodyDeclaration
RecordConstructorDeclaration
RecordConstructorDeclaration:
{Annotation} {ConstructorModifier} [TypeParameters] SimpleTypeName
[Throws] ConstructorBody
Copyright © 2020 Oracle and/or its affiliates.
JEP359: Records (Preview)
Reflection APIReflection APIReflection APIReflection API
The following public methods will be added toThe following public methods will be added toThe following public methods will be added toThe following public methods will be added to java.lang.Classjava.lang.Classjava.lang.Classjava.lang.Class::::
 RecordComponent[] getRecordComponents()
 boolean isRecord()
The methodThe methodThe methodThe method getRecordComponents() returns an array ofreturns an array ofreturns an array ofreturns an array of
java.lang.reflect.RecordComponent objects, whereobjects, whereobjects, whereobjects, where
java.lang.reflect.RecordComponent is a new class. The elements of this arrayis a new class. The elements of this arrayis a new class. The elements of this arrayis a new class. The elements of this array
correspond to the record’s components, in the same order as they appear in the recordcorrespond to the record’s components, in the same order as they appear in the recordcorrespond to the record’s components, in the same order as they appear in the recordcorrespond to the record’s components, in the same order as they appear in the record
declaration. Additional information can be extracted from eachdeclaration. Additional information can be extracted from eachdeclaration. Additional information can be extracted from eachdeclaration. Additional information can be extracted from each RecordComponent in thein thein thein the
array, including its name, type, generic type, annotations, and itsarray, including its name, type, generic type, annotations, and itsarray, including its name, type, generic type, annotations, and itsarray, including its name, type, generic type, annotations, and its accessoraccessoraccessoraccessor method.method.method.method.
The methodThe methodThe methodThe method isRecordisRecordisRecordisRecord() returns true if the given class was declared as a record.() returns true if the given class was declared as a record.() returns true if the given class was declared as a record.() returns true if the given class was declared as a record.
((((Compare with isEnum().).).).)
Copyright © 2020 Oracle and/or its affiliates.
Packaging Tool (Incubator)
What is jpackage?
• A JDK command line tool for packaging self-contained Java
applications
• Meant for Java application developers (not end users)
• Input: a pre-built Java application, a Java runtime
• Output: a native application package
• Supported on: Linux, macOS, Windows
• Provides a straightforward way to give the end user a natural
installation experience on their platform
• Defined by JEP 343:
• https://openjdk.java.net/jeps/343
Copyright © 2020 Oracle and/or its affiliates.
Why do we need jpackage? (1)
• As of JDK 11:
• Shared, auto-updated Java runtime (System JRE) no longer available
• Java Web Start / applets are gone (and incomplete without the above)
• New deployment model: bundled application + Java runtime
• jpackage takes a Java runtime and your application, and creates a
native package that you can distribute
• jpackage runs jlink to create runtime, including application if modular
• Developer can run jlink prior to jpackage for additional customization
Copyright © 2020 Oracle and/or its affiliates.
Why do we need jpackage? (2)
• jlink provides part of the puzzle
• Creates a custom Java runtime from the JDK
• can add additional library or application modules
• can exclude unneeded modules
• same file system layout as the JDK
• Developers can copy that plus their app and zip it up
• but this is not a “ready-to-distribute” bundle
• it's a collection of files, not an installable package or application
• no system integration
• What then?
• Today Java developers “roll their own” using various third-party tools
Copyright © 2020 Oracle and/or its affiliates.
Where does jlink fit in?
• Use jlink to create a custom runtime image:
• Include only the modules you need
• Add your own modules or library modules
• jpackage will run jlink for you in most cases, but you can run it
directly for more control over the Java runtime image you use
Copyright © 2020 Oracle and/or its affiliates.
Using jlink
// Custom runtime with only the java.base module
jlink --output my-jdk --add-modules java.base
// Java runtime with the specified modules (includes java.base)
jlink --output my-jdk --add-modules java.desktop,java.datatransfer
// Java runtime with your modular application and its dependencies
// Strip unneeded files
jlink --output my-jdk --module-path mymod.jar --add-modules mymod 
--no-man-pages --no-header-files --strip-native-commands
Copyright © 2020 Oracle and/or its affiliates.
Features of jpackage (1)
• Can be used to package:
• Desktop apps
• Command line apps
• Creation of an application image
• Support the following native packaging formats:
• Linux: rpm (Red Hat), deb (Debian)
• Mac: dmg, pkg
• Windows: exe, msi
• Specify JDK / app args that will be used when launching the app
• Can be invoked from command line, or via the ToolProvider API
Copyright © 2020 Oracle and/or its affiliates.
Features of jpackage (2)
• Package applications that integrate into the native platform:
• Set file associations to launch app when file with associated suffix is opened
• Launching from platform-specific menu group, e.g., Start menu on Windows
• Desktop shortcuts
• Option to specify update rules for installable packages (such as in rpm/deb)
• Multiple launchers can be created from the same application image
• List of required tools:
• Linux (Red Hat) : rpmutil (4.0d or later)
• Linux (Ubuntu) : dpkg, fakeroot
• macOS: XCode command line tools
• Windows: WiX Toolset (3.0 or later)
Copyright © 2020 Oracle and/or its affiliates.
Features of jpackage (3)
• What does jpackage not do?
• Does not solve how to get the platform installer to the user
• no browser / web integration
• No cross-platform deployment
• No cross-compilation (e.g., must run on macOS to produce dmg)
• No support for jnlp
• JNLPConverter demo can ease transition:
• Takes a jnlp file + resources (jar files) runs jpackage
• Doesn’t handle all cases, but will help you convert
Copyright © 2020 Oracle and/or its affiliates.
JEP349: JFR Event Streaming (1)
• ExposeExposeExposeExpose JDK Flight Recorder data for continuousJDK Flight Recorder data for continuousJDK Flight Recorder data for continuousJDK Flight Recorder data for continuous monitoringmonitoringmonitoringmonitoring
• GoalsGoalsGoalsGoals
 ProvideProvideProvideProvide an API for the continuous consumption of JFR data on disk, both for inan API for the continuous consumption of JFR data on disk, both for inan API for the continuous consumption of JFR data on disk, both for inan API for the continuous consumption of JFR data on disk, both for in----
process and outprocess and outprocess and outprocess and out----ofofofof----processprocessprocessprocess applicationsapplicationsapplicationsapplications
 RecordRecordRecordRecord the same set of events as in the nonthe same set of events as in the nonthe same set of events as in the nonthe same set of events as in the non----streaming case, with overhead lessstreaming case, with overhead lessstreaming case, with overhead lessstreaming case, with overhead less
than 1% ifthan 1% ifthan 1% ifthan 1% if possiblepossiblepossiblepossible
 EventEventEventEvent streaming must be able to costreaming must be able to costreaming must be able to costreaming must be able to co----exist with nonexist with nonexist with nonexist with non----streaming recordings, bothstreaming recordings, bothstreaming recordings, bothstreaming recordings, both
disk and memorydisk and memorydisk and memorydisk and memory basedbasedbasedbased
• NonNonNonNon----GoalsGoalsGoalsGoals
 ProvideProvideProvideProvide synchronous callbacks forsynchronous callbacks forsynchronous callbacks forsynchronous callbacks for consumersconsumersconsumersconsumers
 AllowAllowAllowAllow consumption of inconsumption of inconsumption of inconsumption of in----memorymemorymemorymemory recordingsrecordingsrecordingsrecordings
Copyright © 2020 Oracle and/or its affiliates.
JEP349: JFR Event Streaming (2)
The following example prints the overall CPU usage and locks contended for moreThe following example prints the overall CPU usage and locks contended for moreThe following example prints the overall CPU usage and locks contended for moreThe following example prints the overall CPU usage and locks contended for more
than 10than 10than 10than 10 msmsmsms
try (var rs = new RecordingStream()) {
rs.enable("jdk.CPULoad").withPeriod(Duration.ofSeconds(1));
rs.enable("jdk.JavaMonitorEnter").withThreshold(Duration.ofMillis(10));
rs.onEvent("jdk.CPULoad", event -> {
System.out.println(event.getFloat("machineTotal"));
});
rs.onEvent("jdk.JavaMonitorEnter", event -> {
System.out.println(event.getClass("monitorClass"));
});
rs.start();
}
Copyright © 2020 Oracle and/or its affiliates.
JEP349: JFR Event Streaming (3)
TheTheTheThe RecordingStreamRecordingStreamRecordingStreamRecordingStream class implements the interfaceclass implements the interfaceclass implements the interfaceclass implements the interface jdk.jfr.consumer.EventStreamjdk.jfr.consumer.EventStreamjdk.jfr.consumer.EventStreamjdk.jfr.consumer.EventStream that provides a uniform way to filter and consume eventsthat provides a uniform way to filter and consume eventsthat provides a uniform way to filter and consume eventsthat provides a uniform way to filter and consume events
regardless if the source is a live stream or a file onregardless if the source is a live stream or a file onregardless if the source is a live stream or a file onregardless if the source is a live stream or a file on diskdiskdiskdisk
public interface EventStream extends AutoCloseable {
public static EventStream openRepository();
public static EventStream openRepository(Path directory);
public static EventStream openFile(Path file);
void setStartTime(Instant startTime);
void setEndTime(Instant endTime);
void setOrdered(boolean ordered);
void setReuse(boolean reuse);
void onEvent(Consumer<RecordedEvent> handler);
void onEvent(String eventName, Consumer<RecordedEvent handler);
void onFlush(Runnable handler);
void onClose(Runnable handler);
void onError(Runnable handler);
void remove(Object handler);
void start();
void startAsync();
void awaitTermination();
void awaitTermination(Duration duration);
void close();
} Copyright © 2020 Oracle and/or its affiliates.
JEP358: Helpful NullPointerExceptions (1)
• ImproveImproveImproveImprove the usability ofthe usability ofthe usability ofthe usability of NullPointerExceptionsNullPointerExceptionsNullPointerExceptionsNullPointerExceptions generated by the JVM bygenerated by the JVM bygenerated by the JVM bygenerated by the JVM by
describing precisely which variable wasdescribing precisely which variable wasdescribing precisely which variable wasdescribing precisely which variable was nullnullnullnull
• TheTheTheThe JVM throws aJVM throws aJVM throws aJVM throws a NullPointerExceptionNullPointerExceptionNullPointerExceptionNullPointerException (NPE) at the point in a program(NPE) at the point in a program(NPE) at the point in a program(NPE) at the point in a program
where code tries to dereference a null reference. By analyzing thewhere code tries to dereference a null reference. By analyzing thewhere code tries to dereference a null reference. By analyzing thewhere code tries to dereference a null reference. By analyzing the
program's bytecode instructions, the JVM will determine precisely whichprogram's bytecode instructions, the JVM will determine precisely whichprogram's bytecode instructions, the JVM will determine precisely whichprogram's bytecode instructions, the JVM will determine precisely which
variable was null, and describe the variable (in terms of source code) withvariable was null, and describe the variable (in terms of source code) withvariable was null, and describe the variable (in terms of source code) withvariable was null, and describe the variable (in terms of source code) with
a nulla nulla nulla null----detail message in the NPE. The nulldetail message in the NPE. The nulldetail message in the NPE. The nulldetail message in the NPE. The null----detail message will then bedetail message will then bedetail message will then bedetail message will then be
shown in the JVM's message, alongside the method, filename, and lineshown in the JVM's message, alongside the method, filename, and lineshown in the JVM's message, alongside the method, filename, and lineshown in the JVM's message, alongside the method, filename, and line
numbernumbernumbernumber....
• MittelsMittelsMittelsMittels ProgrammProgrammProgrammProgramm----ByteCodeByteCodeByteCodeByteCode----CommandCommandCommandCommand----AnalyseAnalyseAnalyseAnalyse erkennterkennterkennterkennt die JVM,die JVM,die JVM,die JVM, welchewelchewelchewelche
Variable den Wert NullVariable den Wert NullVariable den Wert NullVariable den Wert Null ergibtergibtergibtergibt
Copyright © 2020 Oracle and/or its affiliates.
JEP358: Helpful NullPointerExceptions (2)
TheTheTheThe JVM displays an exception message on the same line as the exception type, which can result in long lines. ForJVM displays an exception message on the same line as the exception type, which can result in long lines. ForJVM displays an exception message on the same line as the exception type, which can result in long lines. ForJVM displays an exception message on the same line as the exception type, which can result in long lines. For
readability in a web browser, this JEP shows the nullreadability in a web browser, this JEP shows the nullreadability in a web browser, this JEP shows the nullreadability in a web browser, this JEP shows the null----detail message on a second line, after the exception type.detail message on a second line, after the exception type.detail message on a second line, after the exception type.detail message on a second line, after the exception type.
For example, an NPE from the assignment statementFor example, an NPE from the assignment statementFor example, an NPE from the assignment statementFor example, an NPE from the assignment statement a.ia.ia.ia.i = 99; would generate this message:= 99; would generate this message:= 99; would generate this message:= 99; would generate this message:
Exception in thread "main" java.lang.NullPointerException:
Cannot assign field "i" because "a" is null
at Prog.main(Prog.java:5)
If the more complex statementIf the more complex statementIf the more complex statementIf the more complex statement a.b.c.ia.b.c.ia.b.c.ia.b.c.i = 99; throws an NPE, the message would dissect the statement and pinpoint= 99; throws an NPE, the message would dissect the statement and pinpoint= 99; throws an NPE, the message would dissect the statement and pinpoint= 99; throws an NPE, the message would dissect the statement and pinpoint
the cause by showing the full access path which led up to the null:the cause by showing the full access path which led up to the null:the cause by showing the full access path which led up to the null:the cause by showing the full access path which led up to the null:
Exception in thread "main" java.lang.NullPointerException:
Cannot read field "c" because "a.b" is null
at Prog.main(Prog.java:5)
Giving the full access path is more helpful than giving just the name of the null field because it helps the developer toGiving the full access path is more helpful than giving just the name of the null field because it helps the developer toGiving the full access path is more helpful than giving just the name of the null field because it helps the developer toGiving the full access path is more helpful than giving just the name of the null field because it helps the developer to
navigate a line of complex source code, especially if the line of code uses the same name multiple times.navigate a line of complex source code, especially if the line of code uses the same name multiple times.navigate a line of complex source code, especially if the line of code uses the same name multiple times.navigate a line of complex source code, especially if the line of code uses the same name multiple times.
Copyright © 2020 Oracle and/or its affiliates.
JDK 15 Features
JDK 15 (JSR 390) Features - JEP’s
• 339:339:339:339: EdwardsEdwardsEdwardsEdwards----Curve Digital Signature Algorithm (Curve Digital Signature Algorithm (Curve Digital Signature Algorithm (Curve Digital Signature Algorithm (EdDSAEdDSAEdDSAEdDSA)))) [New][New][New][New]
• 360360360360:::: Sealed Classes (PreviewSealed Classes (PreviewSealed Classes (PreviewSealed Classes (Preview)))) [Looking Forward][Looking Forward][Looking Forward][Looking Forward]
• 371371371371:::: Hidden ClassesHidden ClassesHidden ClassesHidden Classes [New[New[New[New]]]]
• 372372372372:::: Remove theRemove theRemove theRemove the NashornNashornNashornNashorn JavaScript EngineJavaScript EngineJavaScript EngineJavaScript Engine [[[[DeprecationsDeprecationsDeprecationsDeprecations &&&& Removals]Removals]Removals]Removals]
• 373373373373:::: ReimplementReimplementReimplementReimplement the Legacythe Legacythe Legacythe Legacy DatagramSocketDatagramSocketDatagramSocketDatagramSocket APIAPIAPIAPI [Modernizing][Modernizing][Modernizing][Modernizing]
• 374374374374:::: Disable and Deprecate Biased LockingDisable and Deprecate Biased LockingDisable and Deprecate Biased LockingDisable and Deprecate Biased Locking [[[[DeprecationsDeprecationsDeprecationsDeprecations &&&& Removals]Removals]Removals]Removals]
• 375375375375:::: Pattern Matching forPattern Matching forPattern Matching forPattern Matching for instanceofinstanceofinstanceofinstanceof (Second Preview)(Second Preview)(Second Preview)(Second Preview) [[[[Looking Forward]Looking Forward]Looking Forward]Looking Forward]
• 377377377377:::: ZGC: A Scalable LowZGC: A Scalable LowZGC: A Scalable LowZGC: A Scalable Low----Latency Garbage CollectorLatency Garbage CollectorLatency Garbage CollectorLatency Garbage Collector [Added to the Standard[Added to the Standard[Added to the Standard[Added to the Standard]]]]
• 378378378378:::: TextTextTextText BlocksBlocksBlocksBlocks [Added to the Standard[Added to the Standard[Added to the Standard[Added to the Standard]]]]
• 379379379379:::: Shenandoah: A LowShenandoah: A LowShenandoah: A LowShenandoah: A Low----PausePausePausePause----Time Garbage CollectorTime Garbage CollectorTime Garbage CollectorTime Garbage Collector [[[[Added to theAdded to theAdded to theAdded to the StandardStandardStandardStandard]]]]
• 381381381381:::: Remove the Solaris and SPARCRemove the Solaris and SPARCRemove the Solaris and SPARCRemove the Solaris and SPARC PortsPortsPortsPorts [Deprecations & Removals][Deprecations & Removals][Deprecations & Removals][Deprecations & Removals]
• 383383383383:::: ForeignForeignForeignForeign----Memory Access API (Second Incubator)Memory Access API (Second Incubator)Memory Access API (Second Incubator)Memory Access API (Second Incubator) [[[[Looking Forward]Looking Forward]Looking Forward]Looking Forward]
• 384384384384:::: Records (Second Preview)Records (Second Preview)Records (Second Preview)Records (Second Preview) [[[[Looking Forward]Looking Forward]Looking Forward]Looking Forward]
• 385385385385:::: Deprecate RMI Activation for RemovalDeprecate RMI Activation for RemovalDeprecate RMI Activation for RemovalDeprecate RMI Activation for Removal [[[[DeprecationsDeprecationsDeprecationsDeprecations &&&& Removals]Removals]Removals]Removals]
JEP 339: Edwards-Curve Digital Signature
Algorithm (EdDSA)
• EdDSA is a modern elliptic curve signature scheme that has several
advantages over the existing signature schemes in the JDK. The primary
goal of this JEP is an implementation of this scheme as standardized in
RFC 8032. This new signature scheme does not replace ECDSA.
• Platform-independent implementation of EdDSA with better
performance than the existing ECDSA implementation (which uses
native C code) at the same security strength
• Aims to prevent side-channel attacks
• Timing is independent of secrets
• Will not branch on secrets
JEP 371: Hidden Classes
• Hidden classes that cannot be used directly by the bytecode of
other classes
• Hidden classes are intended for use by frameworks that generate
classes at run time and use them indirectly, via reflection
• A hidden class may be defined as a member of an access control
nest, and may be unloaded independently of other classes
• Allows to deprecate the nonnonnonnon----standard APIstandard APIstandard APIstandard API
sun.misc.Unsafe::defineAnonymousClass, with the
intent to deprecate it for removal in a future release
JEP 378: Text Blocks
Previewed in JDK 13 and JDK 14
• A text block is a multi-line string literal that avoids the need for
most escape sequences, automatically formats the string in a
predictable way, and gives the developer control over the format
when desired.
• To allow finer control of the processing of newlines and white
spaces, this second preview introduces two new escape
sequences
This JEP represents content from Project Amber, implementing small
language changes to the Java platform.
JEP 377: Z Garbage Collector
Experimental no more
• Change the Z Garbage Collector from experimental feature into a
product feature
• ZGC, is a concurrent, NUMA-aware, scalable low-latency garbage
collector, geared to delivery < 10ms GC pauses even on multi-
terabytes heaps
• The ZGC pause times (ms) are significant lower than parallel or G1
• -XX:+UnlockExperimentalVMOptions option no longer needed
• The default GC remains G1
JEP 379: Shenandoah GC
No longer experimental
• Change the Shenandoah Garbage Collector from experimental
feature into a product feature
• -XX:+UnlockExperimentalVMOptions option no longer needed
• The default GC remains G1
JEP 373: Reimplement the Legacy
DatagramSocket API
• Replace the underlying implementations of the java.net.DatagramSocket
and java.net.MulticastSocket APIs with simpler and more modern
implementations that are easy to maintain and debug.
• The new implementations will be easy to adapt to work with virtual
threads, currently being explored in Project Loom. This is a follow-on to
JEP 353, which already reimplemented the legacy Socket API.
• To reduce the risk of switching the implementation after more than
twenty years, the legacy implementation will not be removed. A JDK-
specific system property, jdk.net.usePlainDatagramSocketImpl, is
introduced to configure the JDK to use the legacy implementation
JEP 360: Sealed Classes (Preview) (1)
• Sealed classes and interfaces restrict which other classes or interfaces
may extend or implement them.
• Allow the author of a class or interface to control which code is reponsible for
implementating it.
• Provide a more declarative way than access modifiers to restrict the use of a
superclass.
• Support future directions in pattern matching by underpinning the exhaustive
analysis of patterns.
This is from Project Amber
Preview features are fully specified, fully implemented, and yet impermanent. Available in a
JDK feature release to provoke developer feedback. May lead to it becoming permanent in
a future Java SE Platform. Requires a flag to enable at compile and at runtime.
JEP 360: Sealed Classes (Preview) (2)
Constraints
• The sealed class and its permitted subclasses must belong to the same
module, and, if declared in an unnamed module, the same package.
• Every permitted subclass must directly extend the sealed class.
• Every permitted subclass must choose a modifier to describe how it
continues the sealing initiated by its superclass; final, sealed, or non-
sealed (a sealed class cannot prevent its permitted subclasses from
doing this.)
This is from Project Amber
Preview features are fully specified, fully implemented, and yet impermanent. Available in a
JDK feature release to provoke developer feedback. May lead to it becoming permanent in
a future Java SE Platform. Requires a flag to enable at compile and at runtime.
JEP 375: Pattern Matching for instanceof
Second Preview
• Enhance the Java programming language with pattern matching for the
instanceof operator.
• Pattern matching allows common logic in a program, namely the
conditional extraction of components from objects, to be expressed
more concisely and safely.
• This is a preview language feature in JDK 15.
This is from Project Amber
Preview features are fully specified, fully implemented, and yet impermanent. Available in a
JDK feature release to provoke developer feedback. May lead to it becoming permanent in
a future Java SE Platform. Requires a flag to enable at compile and at runtime.
JEP 384: Records
Second Preview
• Records provide a compact syntax for declaring classes which are
transparent holders for shallowly (flat) immutable data
This is from Project Amber
Preview features are fully specified, fully implemented, and yet impermanent. Available in a
JDK feature release to provoke developer feedback. May lead to it becoming permanent in
a future Java SE Platform. Requires a flag to enable at compile and at runtime.
JEP 384: Records
Local Records – Added in the Second Preview
• In the example, the aggregation of a merchant and a monthly sales
figure is modeled with a local record, MerchantSales. Using this
record improves the readability of the stream operations which follow:
List<Merchant> findTopMerchants(List<Merchant> merchants, int month) {
// Local record
record MerchantSales(Merchant merchant, double sales) {}
return merchants.stream()
.map(merchant -> new MerchantSales(merchant, computeSales(merchant, month)))
.sorted((m1, m2) -> Double.compare(m2.sales(), m1.sales()))
.map(MerchantSales::merchant)
.collect(toList());
}
JEP 383: Foreign-Memory Access API
Second Incubator
• API to allow Java programs to safely and efficiently access foreign
memory outside of the Java heap.
• Aimes to provide a valid alternative to the main avenues by which Java
programs access foreign memory today, namely
java.nio.ByteBuffer and sun.misc.Unsafe.
First major content from Project Panama, a project with the goal of
improving connections between Java and non-Java API‘s
Incubator modules are a means of putting non-final API‘s and non-final tools in the hands of developers,
while the API‘s/tools progress towards either finalization or removal in a future release.
Deprecations
• Disable and Deprecate Biased Locking (JEP 374)
• RMI Activation for Removal (JEP 385)
Removals
• Nashorn Java Script Engine (JEP 372)
‒ Deprecated for removal since JDK 11
• Solaris and SPARC ports (JEP 381)
‒ Deprecated for removal with JDK 14
• The source code for these features remains availble in OpenJDK
Java SE Roadmap
Java SE Support Roadmap*
http://www.oracle.com/technetwork/java/eolhttp://www.oracle.com/technetwork/java/eolhttp://www.oracle.com/technetwork/java/eolhttp://www.oracle.com/technetwork/java/eol----135779.html135779.html135779.html135779.html
Java SE Support Roadmap*
Web Deployment Technology and JavaFX
JDK 15 Migration Guide
Migrating to Oracle JDK 15 - Migration Guide (1)
https://https://https://https://docs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.html
The JDK 15 migration guideThe JDK 15 migration guideThe JDK 15 migration guideThe JDK 15 migration guide contains the following sections:contains the following sections:contains the following sections:contains the following sections:
• Significant Changes in the JDKSignificant Changes in the JDKSignificant Changes in the JDKSignificant Changes in the JDK
• Preparing For MigrationPreparing For MigrationPreparing For MigrationPreparing For Migration
• Migrating From JDK 8 to Later JDK ReleasesMigrating From JDK 8 to Later JDK ReleasesMigrating From JDK 8 to Later JDK ReleasesMigrating From JDK 8 to Later JDK Releases
• Next StepsNext StepsNext StepsNext Steps
Migrating to Oracle JDK 15 - Migration Guide (2)
https://https://https://https://docs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.html
Prepare for MigrationPrepare for MigrationPrepare for MigrationPrepare for Migration
• Download JDK 15
• Run Your Program Before Recompiling
• Update Third-Party Libraries
• Compile Your Application if Needed
• Run jdeps on Your Code
Oracle JDK 15 – Significant Changes in the JDK
https://https://https://https://docs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.html
• SeeSeeSeeSee JDK 15 Release Notes for the complete list of new features and enhancements inJDK 15 Release Notes for the complete list of new features and enhancements inJDK 15 Release Notes for the complete list of new features and enhancements inJDK 15 Release Notes for the complete list of new features and enhancements in
JDK 15JDK 15JDK 15JDK 15....
• TheTheTheThe following are some of the updates in Java SE 15 and JDK 15:following are some of the updates in Java SE 15 and JDK 15:following are some of the updates in Java SE 15 and JDK 15:following are some of the updates in Java SE 15 and JDK 15:
• TextTextTextText Blocks, first previewed in Java SE 13, is a permanent feature in this release and can be usedBlocks, first previewed in Java SE 13, is a permanent feature in this release and can be usedBlocks, first previewed in Java SE 13, is a permanent feature in this release and can be usedBlocks, first previewed in Java SE 13, is a permanent feature in this release and can be used
without enabling preview features.without enabling preview features.without enabling preview features.without enabling preview features.
• TextTextTextText blocks are multiline string literals that avoid the need for most escape sequences, automaticallyblocks are multiline string literals that avoid the need for most escape sequences, automaticallyblocks are multiline string literals that avoid the need for most escape sequences, automaticallyblocks are multiline string literals that avoid the need for most escape sequences, automatically
format the string in a predictable way, and give the developer control over the format when desired.format the string in a predictable way, and give the developer control over the format when desired.format the string in a predictable way, and give the developer control over the format when desired.format the string in a predictable way, and give the developer control over the format when desired.
See JEP 378: Text Blocks and Programmer's Guide to Text Blocks.See JEP 378: Text Blocks and Programmer's Guide to Text Blocks.See JEP 378: Text Blocks and Programmer's Guide to Text Blocks.See JEP 378: Text Blocks and Programmer's Guide to Text Blocks.
• TheTheTheThe Z Garbage Collector (ZGC) is ready to use in production and no longer an experimental feature.Z Garbage Collector (ZGC) is ready to use in production and no longer an experimental feature.Z Garbage Collector (ZGC) is ready to use in production and no longer an experimental feature.Z Garbage Collector (ZGC) is ready to use in production and no longer an experimental feature.
Enable ZGC by using the commandEnable ZGC by using the commandEnable ZGC by using the commandEnable ZGC by using the command----line optionline optionline optionline option ----XX:+XX:+XX:+XX:+UseZGCUseZGCUseZGCUseZGC. See JEP 377: ZGC: A Scalable Low. See JEP 377: ZGC: A Scalable Low. See JEP 377: ZGC: A Scalable Low. See JEP 377: ZGC: A Scalable Low----
Latency Garbage Collector (Production).Latency Garbage Collector (Production).Latency Garbage Collector (Production).Latency Garbage Collector (Production).
• HiddenHiddenHiddenHidden classes are classes that cannot be used directly by the bytecode of other classes. Hiddenclasses are classes that cannot be used directly by the bytecode of other classes. Hiddenclasses are classes that cannot be used directly by the bytecode of other classes. Hiddenclasses are classes that cannot be used directly by the bytecode of other classes. Hidden
classes are intended for use by frameworks that generate classes at run time and use themclasses are intended for use by frameworks that generate classes at run time and use themclasses are intended for use by frameworks that generate classes at run time and use themclasses are intended for use by frameworks that generate classes at run time and use them
indirectly through reflection. See JEP 371: Hidden Classes.indirectly through reflection. See JEP 371: Hidden Classes.indirectly through reflection. See JEP 371: Hidden Classes.indirectly through reflection. See JEP 371: Hidden Classes.
Oracle JDK 15 – Preview and Incubator Features
https://https://https://https://docs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.html
• SealedSealedSealedSealed ClassesClassesClassesClasses is a Java language preview feature. Sealed classes and interfaces restrict which otheris a Java language preview feature. Sealed classes and interfaces restrict which otheris a Java language preview feature. Sealed classes and interfaces restrict which otheris a Java language preview feature. Sealed classes and interfaces restrict which other
classes or interfaces may extend or implement them. See JEP 360: Sealed Classes (Preview) and Sealedclasses or interfaces may extend or implement them. See JEP 360: Sealed Classes (Preview) and Sealedclasses or interfaces may extend or implement them. See JEP 360: Sealed Classes (Preview) and Sealedclasses or interfaces may extend or implement them. See JEP 360: Sealed Classes (Preview) and Sealed
Classes in Java Platform, Standard Edition Java Language Updates guide.Classes in Java Platform, Standard Edition Java Language Updates guide.Classes in Java Platform, Standard Edition Java Language Updates guide.Classes in Java Platform, Standard Edition Java Language Updates guide.
• PatternPatternPatternPattern Matching forMatching forMatching forMatching for instanceofinstanceofinstanceofinstanceof, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re----previewed for this release.previewed for this release.previewed for this release.previewed for this release.
This feature allows common logic in a program, namely the conditional extraction of components fromThis feature allows common logic in a program, namely the conditional extraction of components fromThis feature allows common logic in a program, namely the conditional extraction of components fromThis feature allows common logic in a program, namely the conditional extraction of components from
objects, to be expressed more concisely and safely. See JEP 375: Pattern Matching forobjects, to be expressed more concisely and safely. See JEP 375: Pattern Matching forobjects, to be expressed more concisely and safely. See JEP 375: Pattern Matching forobjects, to be expressed more concisely and safely. See JEP 375: Pattern Matching for instanceofinstanceofinstanceofinstanceof
(Second Preview) and Pattern Matching for the(Second Preview) and Pattern Matching for the(Second Preview) and Pattern Matching for the(Second Preview) and Pattern Matching for the instanceofinstanceofinstanceofinstanceof in Java Platform, Standard Edition Javain Java Platform, Standard Edition Javain Java Platform, Standard Edition Javain Java Platform, Standard Edition Java
Language Updates guide.Language Updates guide.Language Updates guide.Language Updates guide.
• RecordsRecordsRecordsRecords, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re----previewed for this release. Records are classes that actpreviewed for this release. Records are classes that actpreviewed for this release. Records are classes that actpreviewed for this release. Records are classes that act
as transparent carriers for immutable data. See JEP 384: Records (Second Preview) and Record Classesas transparent carriers for immutable data. See JEP 384: Records (Second Preview) and Record Classesas transparent carriers for immutable data. See JEP 384: Records (Second Preview) and Record Classesas transparent carriers for immutable data. See JEP 384: Records (Second Preview) and Record Classes
in Java Platform, Standard Edition Java Language Updates guide.in Java Platform, Standard Edition Java Language Updates guide.in Java Platform, Standard Edition Java Language Updates guide.in Java Platform, Standard Edition Java Language Updates guide.
• TheTheTheThe Foreign Memory Access APIForeign Memory Access APIForeign Memory Access APIForeign Memory Access API allows Java programs to efficiently and safely access foreign memoryallows Java programs to efficiently and safely access foreign memoryallows Java programs to efficiently and safely access foreign memoryallows Java programs to efficiently and safely access foreign memory
outside of the Java heap. See JEP 383: Foreignoutside of the Java heap. See JEP 383: Foreignoutside of the Java heap. See JEP 383: Foreignoutside of the Java heap. See JEP 383: Foreign----Memory Access API (Second Incubator).Memory Access API (Second Incubator).Memory Access API (Second Incubator).Memory Access API (Second Incubator).
Modular Development with JDK 15
Run smaller images – Remove parts
of Java you don’t use
JavaJavaJavaJava SESESESE 15151515 with jlinkwith jlinkwith jlinkwith jlink vsvsvsvs.... JavaJavaJavaJava SESESESE 15151515 with JREwith JREwith JREwith JRE
NewNewNewNew Project:Project:Project:Project: Leyden (1)Leyden (1)Leyden (1)Leyden (1)
• New Project, Leyden, whose primary goal will be to address the long-term pain
points of Java’s slow startup time, slow time to peak performance, and large
footprint.
• Leyden will address these pain points by introducing a concept of _static images_
to the Java Platform, and to the JDK.
– A static image is a standalone program, derived from an application, which runs
that application -- and no other.
– A static image is a closed world: It cannot load classes from outside the image,
nor can it spin new bytecodes at run time.
NewNewNewNew Project:Project:Project:Project: Leyden (2)Leyden (2)Leyden (2)Leyden (2)
• Project Leyden will take inspiration from past efforts to explore this space,
including the GNU Compiler for Java and the Native Image feature of GraalVM.
Leyden will add static images to the Java Platform Specification, and we expect
that GraalVM will evolve to implement that specification. Developers who use only
the standard, specified static-image feature will then be able to switch with ease
between Leyden (in the JDK), Native Image (in GraalVM), and whatever other
conforming implementations may arise, choosing amongst tradeoffs of compile
time, startup time, and image size.
• We do not intend to implement Leyden by merging the Native Image code from
GraalVM into the JDK. Leyden will, rather, be based upon existing components in
the JDK such as the HotSpot JVM, the `jaotc` ahead-of-time compiler, application
class-data sharing, and the `jlink` linking tool.
Beyond JDK 15
JDK 16 (JSR 391) Features – JEP’s
 JEPs proposed to target JDK 16JEPs proposed to target JDK 16JEPs proposed to target JDK 16JEPs proposed to target JDK 16
• 380:380:380:380: UnixUnixUnixUnix----Domain Socket ChannelsDomain Socket ChannelsDomain Socket ChannelsDomain Socket Channels review ends 2020/10/27review ends 2020/10/27review ends 2020/10/27review ends 2020/10/27
• 392:392:392:392: PackagingPackagingPackagingPackaging ToolToolToolTool review ends 2020/10/30review ends 2020/10/30review ends 2020/10/30review ends 2020/10/30
• 393:393:393:393: ForeignForeignForeignForeign----Memory Access API (ThirdMemory Access API (ThirdMemory Access API (ThirdMemory Access API (Third Incubator)Incubator)Incubator)Incubator) review ends 2020/11/02review ends 2020/11/02review ends 2020/11/02review ends 2020/11/02
• 395:395:395:395: RecordsRecordsRecordsRecords review ends 2020/10/27review ends 2020/10/27review ends 2020/10/27review ends 2020/10/27
 JEPsJEPsJEPsJEPs targeted to JDK 16, so fartargeted to JDK 16, so fartargeted to JDK 16, so fartargeted to JDK 16, so far
• 338:338:338:338: Vector API (Incubator)Vector API (Incubator)Vector API (Incubator)Vector API (Incubator)
• 347:347:347:347: Enable C++14 Language FeaturesEnable C++14 Language FeaturesEnable C++14 Language FeaturesEnable C++14 Language Features
• 357:357:357:357: Migrate from Mercurial toMigrate from Mercurial toMigrate from Mercurial toMigrate from Mercurial to GitGitGitGit
• 369:369:369:369: Migrate to GitHubMigrate to GitHubMigrate to GitHubMigrate to GitHub
• 376:376:376:376: ZGC: Concurrent ThreadZGC: Concurrent ThreadZGC: Concurrent ThreadZGC: Concurrent Thread----Stack ProcessingStack ProcessingStack ProcessingStack Processing
• 386:386:386:386: Alpine Linux PortAlpine Linux PortAlpine Linux PortAlpine Linux Port
• 387:387:387:387: ElasticElasticElasticElastic MetaspaceMetaspaceMetaspaceMetaspace
• 388:388:388:388: Windows/AArch64 PortWindows/AArch64 PortWindows/AArch64 PortWindows/AArch64 Port
Project Skara (1)
• JEP 357: Migrate from Mercurial toJEP 357: Migrate from Mercurial toJEP 357: Migrate from Mercurial toJEP 357: Migrate from Mercurial to GitGitGitGit
• Migrate theMigrate theMigrate theMigrate the OpenJDKOpenJDKOpenJDKOpenJDK Community's source code repositories from Mercurial (hg) toCommunity's source code repositories from Mercurial (hg) toCommunity's source code repositories from Mercurial (hg) toCommunity's source code repositories from Mercurial (hg) to GitGitGitGit
• ProposedProposedProposedProposed totototo target for JDK 16target for JDK 16target for JDK 16target for JDK 16
• GoalsGoalsGoalsGoals
• MigrateMigrateMigrateMigrate all singleall singleall singleall single----repositoryrepositoryrepositoryrepository OpenJDKOpenJDKOpenJDKOpenJDK Projects from Mercurial toProjects from Mercurial toProjects from Mercurial toProjects from Mercurial to GitGitGitGit
• PreservePreservePreservePreserve all version control history, including tagsall version control history, including tagsall version control history, including tagsall version control history, including tags
• ReformatReformatReformatReformat commit messages according tocommit messages according tocommit messages according tocommit messages according to GitGitGitGit best practicesbest practicesbest practicesbest practices
• PortPortPortPort thethethethe jcheckjcheckjcheckjcheck,,,, webrevwebrevwebrevwebrev, and, and, and, and defpathdefpathdefpathdefpath tools totools totools totools to GitGitGitGit
• CreateCreateCreateCreate a tool to translate between Mercurial anda tool to translate between Mercurial anda tool to translate between Mercurial anda tool to translate between Mercurial and GitGitGitGit hasheshasheshasheshashes
Project Skara (2)
• JEP 369: Migrate toJEP 369: Migrate toJEP 369: Migrate toJEP 369: Migrate to GitHubGitHubGitHubGitHub
• HostHostHostHost thethethethe OpenJDKOpenJDKOpenJDKOpenJDK Community'sCommunity'sCommunity'sCommunity's GitGitGitGit repositories on GitHub. In concert with JEP 357 (Migrate from Mercurial torepositories on GitHub. In concert with JEP 357 (Migrate from Mercurial torepositories on GitHub. In concert with JEP 357 (Migrate from Mercurial torepositories on GitHub. In concert with JEP 357 (Migrate from Mercurial to GitGitGitGit), this), this), this), this
would migrate all singlewould migrate all singlewould migrate all singlewould migrate all single----repositoryrepositoryrepositoryrepository OpenJDKOpenJDKOpenJDKOpenJDK Projects to GitHub, including both JDK feature releases and JDK updateProjects to GitHub, including both JDK feature releases and JDK updateProjects to GitHub, including both JDK feature releases and JDK updateProjects to GitHub, including both JDK feature releases and JDK update
releases for versions 11 andreleases for versions 11 andreleases for versions 11 andreleases for versions 11 and laterlaterlaterlater
• ProposedProposedProposedProposed totototo target for JDK 16target for JDK 16target for JDK 16target for JDK 16
• HostHostHostHost allallallall OpenJDKOpenJDKOpenJDKOpenJDK GitGitGitGit repositories at https://github.com/openjdkrepositories at https://github.com/openjdkrepositories at https://github.com/openjdkrepositories at https://github.com/openjdk////
• RunRunRunRun prepreprepre----commit checks (commit checks (commit checks (commit checks (jcheckjcheckjcheckjcheck) before every) before every) before every) before every pushpushpushpush
• IntegrateIntegrateIntegrateIntegrate existingexistingexistingexisting OpenJDKOpenJDKOpenJDKOpenJDK servicesservicesservicesservices
• EnableEnableEnableEnable multiple ways of interacting withmultiple ways of interacting withmultiple ways of interacting withmultiple ways of interacting with GitHubGitHubGitHubGitHub
• EnsureEnsureEnsureEnsure that workflows structurally similar to the existing ethat workflows structurally similar to the existing ethat workflows structurally similar to the existing ethat workflows structurally similar to the existing e----mail andmail andmail andmail and webrevwebrevwebrevwebrev based workflows arebased workflows arebased workflows arebased workflows are supportedsupportedsupportedsupported
• PreservePreservePreservePreserve and archive alland archive alland archive alland archive all metadatametadatametadatametadata
• EnsureEnsureEnsureEnsure thatthatthatthat OpenJDKOpenJDKOpenJDKOpenJDK Community can always move to a different sourceCommunity can always move to a different sourceCommunity can always move to a different sourceCommunity can always move to a different source----code hostingcode hostingcode hostingcode hosting providerproviderproviderprovider
• DoDoDoDo not require developers to installnot require developers to installnot require developers to installnot require developers to install OpenJDKOpenJDKOpenJDKOpenJDK specific tools in order tospecific tools in order tospecific tools in order tospecific tools in order to contributecontributecontributecontribute
• DoDoDoDo not change thenot change thenot change thenot change the OpenJDKOpenJDKOpenJDKOpenJDK BylawsBylawsBylawsBylaws
• DoDoDoDo not change thenot change thenot change thenot change the OpenJDKOpenJDKOpenJDKOpenJDK CensusCensusCensusCensus
Key Java Platform Investments
• Security & Vulnerability
• Approachability & Continued language enhancements
• Cloud Containers & Observability
• Data optimization & Density
• Predictability at Scale
• Performance & Efficiency
• Hardware Acceleration (GPU, NVM, etc.)
Summary
• Continuous delivery of innovations
• The most exciting technical roadmap in many years
• Need your help testing EA builds (jdk.java.net)
Join andJoin andJoin andJoin and becomebecomebecomebecome anananan OpenJDKOpenJDKOpenJDKOpenJDK contributorcontributorcontributorcontributor
OpenJDK.java.netOpenJDK.java.netOpenJDK.java.netOpenJDK.java.net
Copyright © 2020 Oracle and/or its affiliates.
Copyright © 2020 Oracle and/or its affiliates.
Danke!Danke!Danke!Danke!
Wolfgang.Weigend@oracle.comWolfgang.Weigend@oracle.comWolfgang.Weigend@oracle.comWolfgang.Weigend@oracle.com
Twitter: @wolflookTwitter: @wolflookTwitter: @wolflookTwitter: @wolflook

More Related Content

What's hot

GlassFish in Production Environments
GlassFish in Production EnvironmentsGlassFish in Production Environments
GlassFish in Production EnvironmentsBruno Borges
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawComsysto Reply GmbH
 
Project Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To JavaProject Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To JavaC4Media
 
How to Become a Winner in the JVM Performance-Tuning Battle
How to Become a Winner in the JVM Performance-Tuning BattleHow to Become a Winner in the JVM Performance-Tuning Battle
How to Become a Winner in the JVM Performance-Tuning BattleCapgemini
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsDavid Delabassee
 
JDK 9: The Start of a New Future for Java
JDK 9: The Start of a New Future for JavaJDK 9: The Start of a New Future for Java
JDK 9: The Start of a New Future for JavaSimon Ritter
 
Is An Agile Standard Possible For Java?
Is An Agile Standard Possible For Java?Is An Agile Standard Possible For Java?
Is An Agile Standard Possible For Java?Simon Ritter
 
JDK 9 and JDK 10 Deep Dive
JDK 9 and JDK 10 Deep DiveJDK 9 and JDK 10 Deep Dive
JDK 9 and JDK 10 Deep DiveSimon Ritter
 
How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17Johan Janssen
 
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)Martin Toshev
 
Java 9 Module System Introduction
Java 9 Module System IntroductionJava 9 Module System Introduction
Java 9 Module System IntroductionDan Stine
 
Database As A Service: OEM + ODA (OOW 15 Presentation)
Database As A Service: OEM + ODA (OOW 15 Presentation)Database As A Service: OEM + ODA (OOW 15 Presentation)
Database As A Service: OEM + ODA (OOW 15 Presentation)Bobby Curtis
 
JVMs in Containers - Best Practices
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best PracticesDavid Delabassee
 
GoldenGate Monitoring - GOUSER - 4/2014
GoldenGate Monitoring - GOUSER - 4/2014GoldenGate Monitoring - GOUSER - 4/2014
GoldenGate Monitoring - GOUSER - 4/2014Bobby Curtis
 
JDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerJDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerSimon Ritter
 

What's hot (20)

Java 2012 conference keynote - Java Strategy & Roadmap - WebLogic & GlassFish...
Java 2012 conference keynote - Java Strategy & Roadmap - WebLogic & GlassFish...Java 2012 conference keynote - Java Strategy & Roadmap - WebLogic & GlassFish...
Java 2012 conference keynote - Java Strategy & Roadmap - WebLogic & GlassFish...
 
Java Desktop 2019
Java Desktop 2019Java Desktop 2019
Java Desktop 2019
 
GlassFish in Production Environments
GlassFish in Production EnvironmentsGlassFish in Production Environments
GlassFish in Production Environments
 
Java 9 and Project Jigsaw
Java 9 and Project JigsawJava 9 and Project Jigsaw
Java 9 and Project Jigsaw
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project Jigsaw
 
Project Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To JavaProject Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To Java
 
How to Become a Winner in the JVM Performance-Tuning Battle
How to Become a Winner in the JVM Performance-Tuning BattleHow to Become a Winner in the JVM Performance-Tuning Battle
How to Become a Winner in the JVM Performance-Tuning Battle
 
JDK 9 Deep Dive
JDK 9 Deep DiveJDK 9 Deep Dive
JDK 9 Deep Dive
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & Triumphs
 
JDK 9: The Start of a New Future for Java
JDK 9: The Start of a New Future for JavaJDK 9: The Start of a New Future for Java
JDK 9: The Start of a New Future for Java
 
Is An Agile Standard Possible For Java?
Is An Agile Standard Possible For Java?Is An Agile Standard Possible For Java?
Is An Agile Standard Possible For Java?
 
JDK 9 and JDK 10 Deep Dive
JDK 9 and JDK 10 Deep DiveJDK 9 and JDK 10 Deep Dive
JDK 9 and JDK 10 Deep Dive
 
How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17How and why to upgrade to java 16 or 17
How and why to upgrade to java 16 or 17
 
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
Modularity of the Java Platform (OSGi, Jigsaw and Penrose)
 
Ausoug glassfish perth
Ausoug glassfish perthAusoug glassfish perth
Ausoug glassfish perth
 
Java 9 Module System Introduction
Java 9 Module System IntroductionJava 9 Module System Introduction
Java 9 Module System Introduction
 
Database As A Service: OEM + ODA (OOW 15 Presentation)
Database As A Service: OEM + ODA (OOW 15 Presentation)Database As A Service: OEM + ODA (OOW 15 Presentation)
Database As A Service: OEM + ODA (OOW 15 Presentation)
 
JVMs in Containers - Best Practices
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best Practices
 
GoldenGate Monitoring - GOUSER - 4/2014
GoldenGate Monitoring - GOUSER - 4/2014GoldenGate Monitoring - GOUSER - 4/2014
GoldenGate Monitoring - GOUSER - 4/2014
 
JDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java SmallerJDK 9: Big Changes To Make Java Smaller
JDK 9: Big Changes To Make Java Smaller
 

Similar to It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15

Explaining the new Java release and licensing models
Explaining the new Java release and licensing modelsExplaining the new Java release and licensing models
Explaining the new Java release and licensing modelsMark West
 
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"GlobalLogic Ukraine
 
It's a jdk jungle out there - JDK 11 and OpenJDK 11
It's a jdk jungle out there - JDK 11 and OpenJDK 11It's a jdk jungle out there - JDK 11 and OpenJDK 11
It's a jdk jungle out there - JDK 11 and OpenJDK 11Wolfgang Weigend
 
Developing Java EE Applications on IntelliJ IDEA with Oracle WebLogic 12c
Developing Java EE Applications on IntelliJ IDEA with Oracle WebLogic 12cDeveloping Java EE Applications on IntelliJ IDEA with Oracle WebLogic 12c
Developing Java EE Applications on IntelliJ IDEA with Oracle WebLogic 12cBruno Borges
 
Java: how to thrive in the changing world
Java: how to thrive in the changing worldJava: how to thrive in the changing world
Java: how to thrive in the changing worldAlexey Fyodorov
 
Java WebStart Is Dead: What Should We Do Now?
Java WebStart Is Dead: What Should We Do Now?Java WebStart Is Dead: What Should We Do Now?
Java WebStart Is Dead: What Should We Do Now?Hendrik Ebbers
 
Why should i switch to Java SE 7
Why should i switch to Java SE 7Why should i switch to Java SE 7
Why should i switch to Java SE 7Vinay H G
 
OpenDDR and Jakarta MVC - JavaLand 2021
OpenDDR and Jakarta MVC - JavaLand 2021OpenDDR and Jakarta MVC - JavaLand 2021
OpenDDR and Jakarta MVC - JavaLand 2021Werner Keil
 
Java and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemJava and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemRafael Winterhalter
 
Java in a world of containers
Java in a world of containersJava in a world of containers
Java in a world of containersDocker, Inc.
 
Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018Arun Gupta
 

Similar to It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15 (20)

Explaining the new Java release and licensing models
Explaining the new Java release and licensing modelsExplaining the new Java release and licensing models
Explaining the new Java release and licensing models
 
Comparison between Oracle JDK, Oracle OpenJDK, and Red Hat OpenJDK.v1.0.20191009
Comparison between Oracle JDK, Oracle OpenJDK, and Red Hat OpenJDK.v1.0.20191009Comparison between Oracle JDK, Oracle OpenJDK, and Red Hat OpenJDK.v1.0.20191009
Comparison between Oracle JDK, Oracle OpenJDK, and Red Hat OpenJDK.v1.0.20191009
 
Java11 terms of_use
Java11 terms of_useJava11 terms of_use
Java11 terms of_use
 
Java Cloud and Container Ready
Java Cloud and Container ReadyJava Cloud and Container Ready
Java Cloud and Container Ready
 
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
Javantura v6 - JDK 11 & JDK 12 - Dalibor TopicJavantura v6 - JDK 11 & JDK 12 - Dalibor Topic
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
 
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
Java Webinar #12: "Java Versions and Features: Since JDK 8 to 16"
 
It's a jdk jungle out there - JDK 11 and OpenJDK 11
It's a jdk jungle out there - JDK 11 and OpenJDK 11It's a jdk jungle out there - JDK 11 and OpenJDK 11
It's a jdk jungle out there - JDK 11 and OpenJDK 11
 
Developing Java EE Applications on IntelliJ IDEA with Oracle WebLogic 12c
Developing Java EE Applications on IntelliJ IDEA with Oracle WebLogic 12cDeveloping Java EE Applications on IntelliJ IDEA with Oracle WebLogic 12c
Developing Java EE Applications on IntelliJ IDEA with Oracle WebLogic 12c
 
Java mobility (1)
Java mobility (1)Java mobility (1)
Java mobility (1)
 
JDK 10 Java Module System
JDK 10 Java Module SystemJDK 10 Java Module System
JDK 10 Java Module System
 
JDK versions and OpenJDK
JDK versions and OpenJDKJDK versions and OpenJDK
JDK versions and OpenJDK
 
Java: how to thrive in the changing world
Java: how to thrive in the changing worldJava: how to thrive in the changing world
Java: how to thrive in the changing world
 
Java 11 OMG
Java 11 OMGJava 11 OMG
Java 11 OMG
 
Java WebStart Is Dead: What Should We Do Now?
Java WebStart Is Dead: What Should We Do Now?Java WebStart Is Dead: What Should We Do Now?
Java WebStart Is Dead: What Should We Do Now?
 
Why should i switch to Java SE 7
Why should i switch to Java SE 7Why should i switch to Java SE 7
Why should i switch to Java SE 7
 
OpenDDR and Jakarta MVC - JavaLand 2021
OpenDDR and Jakarta MVC - JavaLand 2021OpenDDR and Jakarta MVC - JavaLand 2021
OpenDDR and Jakarta MVC - JavaLand 2021
 
Java and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystemJava and OpenJDK: disecting the ecosystem
Java and OpenJDK: disecting the ecosystem
 
JavaOne Update zur Java Plattform
JavaOne Update zur Java PlattformJavaOne Update zur Java Plattform
JavaOne Update zur Java Plattform
 
Java in a world of containers
Java in a world of containersJava in a world of containers
Java in a world of containers
 
Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018Java in a World of Containers - DockerCon 2018
Java in a World of Containers - DockerCon 2018
 

More from Wolfgang Weigend

The JDK 8 end of public updates and the Java SE subscription
The JDK 8 end of public updates and the Java SE subscription The JDK 8 end of public updates and the Java SE subscription
The JDK 8 end of public updates and the Java SE subscription Wolfgang Weigend
 
Microservices and Container
Microservices and ContainerMicroservices and Container
Microservices and ContainerWolfgang Weigend
 
JDK 9 Java Platform Module System
JDK 9 Java Platform Module SystemJDK 9 Java Platform Module System
JDK 9 Java Platform Module SystemWolfgang Weigend
 
fn project serverless computing
fn project serverless computingfn project serverless computing
fn project serverless computingWolfgang Weigend
 
Development with JavaFX 9 in JDK 9.0.1
Development with JavaFX 9 in JDK 9.0.1Development with JavaFX 9 in JDK 9.0.1
Development with JavaFX 9 in JDK 9.0.1Wolfgang Weigend
 
Java Flight Recorder Javamagazin May 2017
Java Flight Recorder Javamagazin May 2017Java Flight Recorder Javamagazin May 2017
Java Flight Recorder Javamagazin May 2017Wolfgang Weigend
 
Javamagazin 1.2016 jdk9_ea_b83_jigsaw
Javamagazin 1.2016 jdk9_ea_b83_jigsawJavamagazin 1.2016 jdk9_ea_b83_jigsaw
Javamagazin 1.2016 jdk9_ea_b83_jigsawWolfgang Weigend
 
Das 1×1 des java supports wie die wartung älterer jdk-versionen weitergeht
Das 1×1 des java supports wie die wartung älterer jdk-versionen weitergehtDas 1×1 des java supports wie die wartung älterer jdk-versionen weitergeht
Das 1×1 des java supports wie die wartung älterer jdk-versionen weitergehtWolfgang Weigend
 
Automated testing of JavaFX GUI components
Automated testing of JavaFX GUI componentsAutomated testing of JavaFX GUI components
Automated testing of JavaFX GUI componentsWolfgang Weigend
 
Java mission control and java flight recorder
Java mission control and java flight recorderJava mission control and java flight recorder
Java mission control and java flight recorderWolfgang Weigend
 
Automated testing of JavaFX UI components
Automated testing of JavaFX UI componentsAutomated testing of JavaFX UI components
Automated testing of JavaFX UI componentsWolfgang Weigend
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollWolfgang Weigend
 
Jm 10.13 weigend_lagergren_nashorn
Jm 10.13 weigend_lagergren_nashornJm 10.13 weigend_lagergren_nashorn
Jm 10.13 weigend_lagergren_nashornWolfgang Weigend
 
Article - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerArticle - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerWolfgang Weigend
 

More from Wolfgang Weigend (15)

The JDK 8 end of public updates and the Java SE subscription
The JDK 8 end of public updates and the Java SE subscription The JDK 8 end of public updates and the Java SE subscription
The JDK 8 end of public updates and the Java SE subscription
 
Microservices and Container
Microservices and ContainerMicroservices and Container
Microservices and Container
 
JDK 9 Java Platform Module System
JDK 9 Java Platform Module SystemJDK 9 Java Platform Module System
JDK 9 Java Platform Module System
 
fn project serverless computing
fn project serverless computingfn project serverless computing
fn project serverless computing
 
Development with JavaFX 9 in JDK 9.0.1
Development with JavaFX 9 in JDK 9.0.1Development with JavaFX 9 in JDK 9.0.1
Development with JavaFX 9 in JDK 9.0.1
 
Java Flight Recorder Javamagazin May 2017
Java Flight Recorder Javamagazin May 2017Java Flight Recorder Javamagazin May 2017
Java Flight Recorder Javamagazin May 2017
 
Javamagazin 1.2016 jdk9_ea_b83_jigsaw
Javamagazin 1.2016 jdk9_ea_b83_jigsawJavamagazin 1.2016 jdk9_ea_b83_jigsaw
Javamagazin 1.2016 jdk9_ea_b83_jigsaw
 
Das 1×1 des java supports wie die wartung älterer jdk-versionen weitergeht
Das 1×1 des java supports wie die wartung älterer jdk-versionen weitergehtDas 1×1 des java supports wie die wartung älterer jdk-versionen weitergeht
Das 1×1 des java supports wie die wartung älterer jdk-versionen weitergeht
 
Automated testing of JavaFX GUI components
Automated testing of JavaFX GUI componentsAutomated testing of JavaFX GUI components
Automated testing of JavaFX GUI components
 
Java mission control and java flight recorder
Java mission control and java flight recorderJava mission control and java flight recorder
Java mission control and java flight recorder
 
Automated testing of JavaFX UI components
Automated testing of JavaFX UI componentsAutomated testing of JavaFX UI components
Automated testing of JavaFX UI components
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
 
JavaFX goes open source
JavaFX goes open sourceJavaFX goes open source
JavaFX goes open source
 
Jm 10.13 weigend_lagergren_nashorn
Jm 10.13 weigend_lagergren_nashornJm 10.13 weigend_lagergren_nashorn
Jm 10.13 weigend_lagergren_nashorn
 
Article - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerArticle - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der Entwickler
 

Recently uploaded

DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 

Recently uploaded (20)

DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 

It's a JDK- Jungle Out There – JDK 15 and OpenJDK 15

  • 1. Copyright © 2020 Oracle and/or its affiliates. It's a JDK-Jungle out there - JDK 15 and OpenJDK 15 Wolfgang Weigend Master Principal Solution Engineer | global Java Team Java Technology & GraalVM and Architecture
  • 2. Safe Harbor Statement 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, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
  • 3. Agenda Java Version Numbers & Release Cycle OpenJDK & Oracle OpenJDK Builds JDK 14 & JDK 15 Features Java SE Roadmap & Java SE Subscription JDK 15 Migration Guide Beyond JDK 15 Summary 1 2 3 4 5 6 7
  • 4. Java History Milestones Copyright © 2020, Oracle and/or its affiliates. All rights reserved. Java initiated as research project at Sun Java powers the web; bundled with the Netscape browser Java becomes #1 programming language for enterprise applications Sun open sources Java 1991 1995 1999 2006 Java 7 – extending JVM to dynamic programming languages Java 9 – modular Java Java 14 and Java 15 2011 2017 2020 Oracle acquires Sun 2009 Java 10 – start of predictable release cadence 2018
  • 5.  Rules for Java CPU’s  Main release for security vulnerabilities  Covers all JDK families (15, 14, 13, 12, 11, 8, 7, 6)  CPU release triggers Auto-update  Dates published 12 months in advance  Security Alerts are released as necessary  Based off the previous (non-CPU) release  Released simultaneously on java.com and OTN  JDK 15.0.1 - Security Baselines JRE Family Version JRE Security Baseline (Full Version String) 14 14.0.2 13 13.0.2 12 12.0.2 11 11.0.9+7 10 10.0.2 9 9.0.4 8 1.8.0_271-b09 7 1.7.0_281-b06 6 1.6.0_221 JDK Version Numbers and JavaJDK Version Numbers and JavaJDK Version Numbers and JavaJDK Version Numbers and Java Critical Patch UpdatesCritical Patch UpdatesCritical Patch UpdatesCritical Patch Updates  $FEATURE -- formerly $MAJOR  $INTERIM -- formerly $MINOR  $UPDATE -- formerly $SECURITY  $EMERG -- The emergency-release counter, to produce an emergency release to fix an urgent security issue.  $FEATURE.$INTERIM.$UPDATE.$EMERG
  • 6. Difference between Oracle OpenJDK & Oracle JDK with Java SE 8 .. and the change since Oracle JDK 11 • Java SE 8 • Security • Performance • Support • Since Oracle JDK 11 it‘s technically interchangeable • Security • Performance • Support only with Oracle JDK
  • 7. JDK 6 Month Release Cadence Option to use Oracle JDK or Oracle OpenJDK
  • 8. Targeted JEP’s per JDK Release
  • 9. Issues fixed in JDK 14 per organization https://blogs.oracle.com/javahttps://blogs.oracle.com/javahttps://blogs.oracle.com/javahttps://blogs.oracle.com/java----platformplatformplatformplatform----group/thegroup/thegroup/thegroup/the----arrivalarrivalarrivalarrival----ofofofof----javajavajavajava----14141414 • JDK BUG System commitsJDK BUG System commitsJDK BUG System commitsJDK BUG System commits • OverallOverallOverallOverall 1986198619861986 JIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDK 14141414 • 1458145814581458 issues were completed by Oracleissues were completed by Oracleissues were completed by Oracleissues were completed by Oracle • 528528528528 issues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizations
  • 10. Issues fixed in JDK 15 per organization https://https://https://https://blogs.oracle.com/javablogs.oracle.com/javablogs.oracle.com/javablogs.oracle.com/java----platformplatformplatformplatform----group/thegroup/thegroup/thegroup/the----arrivalarrivalarrivalarrival----ofofofof----javajavajavajava----15151515 • JDK BUG System commitsJDK BUG System commitsJDK BUG System commitsJDK BUG System commits • OverallOverallOverallOverall 2136213621362136 JIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDKJIRA issues marked as fixed in JDK 15151515 • 1702170217021702 issues were completed by Oracleissues were completed by Oracleissues were completed by Oracleissues were completed by Oracle • 434434434434 issues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizationsissues were contributed by individual developers and developers working for other organizations
  • 12. OpenJDK Project • Open source implementation of Java SE • Licensed under GPLv2 with classpath exception • Reference implementation for Java SE 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, .. • Different vendors/implementers working in common space – Oracle, IBM, Intel, Twitter, Azul, Google, RedHat, SAP • Many Java SE related projects
  • 13. Oracle Contributor Agreement - OCTLA Signatories List • The following organizations and individuals have signed the OpenJDK Community TCK License Agreement (OCTLA) and been granted access to the JCK – Signatories for Java SE 9, or later • Amazon.com Services, Inc. • Ampere Computing LLC • Azul Systems, Inc. • BellSoft • Canonical • Fujitsu Technology Solutions GmbH • J-Class Solutions, Inc. • London Jamocha Community • Loongson Technology Co., Ltd. • Marvell Semiconductor Inc. • MicroDoc Software GmbH • Red Hat • Sage Embedded Software LLC • SAP • SUSE Linux GmbH • Twitter • Waratek Limited http://openjdk.java.net/groups/conformance/JckAccess/jck-access.html
  • 14. OpenJDK and Java Ownership • Java is a registered trademark of Oracle – OpenJDK is named idependently – Access to the Technology Compatibility Kit (TCK) is restricted • TCK access requires to sign the OpenJDK Community TCK License Agreement (OCTLA) – OpenJDK or substantially projects only – OCTLA did not allow to disclose TCK information to Non-OCTLA licensees • OCTLA is not a trademark license • OpenJDK could be used according to the OpenJDK Trademark Notice – http://openjdk.java.net/legal/openjdk-trademark-notice.html
  • 15. OpenJDK Infrastructure • OpenJDK homepage • Mercurial repositories – Forests of nested sub-repositories • Mailing lists • JDK Bug System – https://bugs.openjdk.java.net • Code review server cr.openjdk.java.net – Review requests in Webrev format – Access only for Author or higher roles • OpenJDK Wiki for group member only to get write access
  • 16. OpenJDK Bug Reporting • Bug should be reproduced with the latest builds • Debug build is appropriate • Simple test case desirable (Jtreg test, ..) • JDK Bug System search for similar bugs – Public visible bugs – Invisible bugs like security bugs and customer bugs • Non-Authors bug submit only with Java Bug Database and temp bug ID – https://bugs.java.com/ • Use to write directly to the mailing list for simple reproducible bugs
  • 17. OpenJDK Tools - Mercurial • Mercurial is a distributed source control system implemented in Python • OpenJDK uses nested sub-repositories, i.e. forest: – to clone them manually, like corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn $ hg clone http://hg.openjdk.java.net/jdk9/dev jdk9-dev $ cd jdk9-dev $ hg clone http://hg.openjdk.java.net/jdk9/dev/hotspot $ hg clone http://hg.openjdk.java.net/jdk9/dev/nashorn – or use the get_source.sh script which does the same in parallel $ hg clone http://hg.openjdk.java.net/jdk9/dev jdk9-dev $ cd jdk9-dev $ sh get_source.sh • Use common/bin/hgforest.sh to execute hg commands in all repositories
  • 18. • Oracle's OpenJDK JDK binaries for Windows, macOS, and Linux are available on release-specific pages of jdk.java.net as .tar.gz or .zip archives. • As an example, the archives for JDK 15 may be found on jdk.java.net/15 and may be extracted on the command line using – $ tar xvf openjdk-15*_bin.tar.gz or – $ unzip openjdk-15*_bin.zip depending on the archive type. Download and install prebuilt OpenJDK 15 packages https://openjdk.java.net/install/
  • 19. • This page provides production-ready open-source builds of the Java Development Kit, version 15, an implementation of the Java SE 15 Platform under the GNU General Public License, version 2, with the Classpath Exception. • Commercial builds of JDK 15 from Oracle, under a non-open-source license, can be found at the Oracle Technology Network. • Documentation – Features – Release notes – API Javadoc – Tool & command reference • Builds – Linux / AArch64 tar.gz (sha256) 170467678 – Linux / x64 tar.gz (sha256) 195313679 – macOS / x64 tar.gz (sha256) 192743279 – Windows / x64 zip (sha256) 195901213 JDK 15 General-Availability Release https://jdk.java.net/15/ JDK 16 Early-Access Builds https://jdk.java.net/16/
  • 21. JDK 14 Standard and Preview Features $ javac HelloWorld.java //////// Do not enable any preview featuresDo not enable any preview featuresDo not enable any preview featuresDo not enable any preview features $ javac --release 14 --enable-preview HelloWorld.java //////// Enable all preview features of JDK 14Enable all preview features of JDK 14Enable all preview features of JDK 14Enable all preview features of JDK 14 $ java --enable-preview HelloWorld //////// Run with preview features of JDKRun with preview features of JDKRun with preview features of JDKRun with preview features of JDK 14141414 $ javac --release 14 --enable-preview HelloWolfgang.java $ java HelloWolfgang Error: LinkageError occurred while loading main class HelloWolfgang java.lang.UnsupportedClassVersionError: Preview features are not enabled for HelloWolfgang (class file version 58.65535). Try running with '--enable-preview' $ java --enable-preview HelloWolfgang Hello Wolfgang! Date today = 2020-04-14 Time now = 20:57:07.180454400 Copyright © 2020 Oracle and/or its affiliates.
  • 22. JDK 14 – Features – JEP’s • 305:305:305:305: Pattern Matching forPattern Matching forPattern Matching forPattern Matching for instanceofinstanceofinstanceofinstanceof (Preview)(Preview)(Preview)(Preview) • 343343343343:::: Packaging Tool (Incubator)Packaging Tool (Incubator)Packaging Tool (Incubator)Packaging Tool (Incubator) • 345:345:345:345: NUMANUMANUMANUMA----Aware Memory Allocation for G1Aware Memory Allocation for G1Aware Memory Allocation for G1Aware Memory Allocation for G1 • 349:349:349:349: JFR Event StreamingJFR Event StreamingJFR Event StreamingJFR Event Streaming • 352:352:352:352: NonNonNonNon----Volatile Mapped Byte BuffersVolatile Mapped Byte BuffersVolatile Mapped Byte BuffersVolatile Mapped Byte Buffers • 358:358:358:358: HelpfulHelpfulHelpfulHelpful NullPointerExceptionsNullPointerExceptionsNullPointerExceptionsNullPointerExceptions • 359:359:359:359: Records (Preview)Records (Preview)Records (Preview)Records (Preview) • 361:361:361:361: Switch Expressions (Standard)Switch Expressions (Standard)Switch Expressions (Standard)Switch Expressions (Standard) • 362:362:362:362: Deprecate the Solaris and SPARC PortsDeprecate the Solaris and SPARC PortsDeprecate the Solaris and SPARC PortsDeprecate the Solaris and SPARC Ports • 363:363:363:363: Remove the Concurrent Mark Sweep (CMS) Garbage CollectorRemove the Concurrent Mark Sweep (CMS) Garbage CollectorRemove the Concurrent Mark Sweep (CMS) Garbage CollectorRemove the Concurrent Mark Sweep (CMS) Garbage Collector • 364:364:364:364: ZGC onZGC onZGC onZGC on macOSmacOSmacOSmacOS • 365:365:365:365: ZGC on WindowsZGC on WindowsZGC on WindowsZGC on Windows • 366:366:366:366: Deprecate theDeprecate theDeprecate theDeprecate the ParallelScavengeParallelScavengeParallelScavengeParallelScavenge ++++ SerialOldSerialOldSerialOldSerialOld GC CombinationGC CombinationGC CombinationGC Combination • 367:367:367:367: Remove the Pack200 Tools and APIRemove the Pack200 Tools and APIRemove the Pack200 Tools and APIRemove the Pack200 Tools and API • 368:368:368:368: Text Blocks (Second Preview)Text Blocks (Second Preview)Text Blocks (Second Preview)Text Blocks (Second Preview) • 370:370:370:370: ForeignForeignForeignForeign----Memory Access API (Incubator)Memory Access API (Incubator)Memory Access API (Incubator)Memory Access API (Incubator) https://openjdk.java.net/projects/jdk/14/
  • 23. JEP 359: Records (Preview) • RecordsRecordsRecordsRecords provide a compact syntax for declaring classesprovide a compact syntax for declaring classesprovide a compact syntax for declaring classesprovide a compact syntax for declaring classes that are nothing more, orthat are nothing more, orthat are nothing more, orthat are nothing more, or mostly, plain carriers that serves as simple aggregatesmostly, plain carriers that serves as simple aggregatesmostly, plain carriers that serves as simple aggregatesmostly, plain carriers that serves as simple aggregates • Example:Example:Example:Example: record Point(int x, int y) { } • Records acquire many standard members automaticalyRecords acquire many standard members automaticalyRecords acquire many standard members automaticalyRecords acquire many standard members automaticaly • A private final field for each componentA private final field for each componentA private final field for each componentA private final field for each component • A public read accessor for each componentA public read accessor for each componentA public read accessor for each componentA public read accessor for each component • A public constructorA public constructorA public constructorA public constructor • Implementations or equals, hashCode and toStringImplementations or equals, hashCode and toStringImplementations or equals, hashCode and toStringImplementations or equals, hashCode and toString • Replacement of data class with „records“Replacement of data class with „records“Replacement of data class with „records“Replacement of data class with „records“ • Records as a “simpleRecords as a “simpleRecords as a “simpleRecords as a “simple datadatadatadata encapsulation”encapsulation”encapsulation”encapsulation” • “Records“Records“Records“Records are serialized differently than ordinary serializable orare serialized differently than ordinary serializable orare serialized differently than ordinary serializable orare serialized differently than ordinary serializable or externalizableexternalizableexternalizableexternalizable objects.objects.objects.objects. The serialized form of a record object is a sequence of values derived from theThe serialized form of a record object is a sequence of values derived from theThe serialized form of a record object is a sequence of values derived from theThe serialized form of a record object is a sequence of values derived from the recordrecordrecordrecord componentscomponentscomponentscomponents.”.”.”.”httpshttpshttpshttps://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/ObjectInputStream.html#record://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/ObjectInputStream.html#record://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/ObjectInputStream.html#record://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/ObjectInputStream.html#record----serializationserializationserializationserialization https://openjdk.java.net/jeps/359
  • 24. JEP359: Records (Preview) GrammarGrammarGrammarGrammar RecordDeclaration: {ClassModifier} record TypeIdentifier [TypeParameters] (RecordComponents) [SuperInterfaces] [RecordBody] RecordComponents: {RecordComponent {, RecordComponent}} RecordComponent: {Annotation} UnannType Identifier RecordBody: { {RecordBodyDeclaration} } RecordBodyDeclaration: ClassBodyDeclaration RecordConstructorDeclaration RecordConstructorDeclaration: {Annotation} {ConstructorModifier} [TypeParameters] SimpleTypeName [Throws] ConstructorBody Copyright © 2020 Oracle and/or its affiliates.
  • 25. JEP359: Records (Preview) Reflection APIReflection APIReflection APIReflection API The following public methods will be added toThe following public methods will be added toThe following public methods will be added toThe following public methods will be added to java.lang.Classjava.lang.Classjava.lang.Classjava.lang.Class::::  RecordComponent[] getRecordComponents()  boolean isRecord() The methodThe methodThe methodThe method getRecordComponents() returns an array ofreturns an array ofreturns an array ofreturns an array of java.lang.reflect.RecordComponent objects, whereobjects, whereobjects, whereobjects, where java.lang.reflect.RecordComponent is a new class. The elements of this arrayis a new class. The elements of this arrayis a new class. The elements of this arrayis a new class. The elements of this array correspond to the record’s components, in the same order as they appear in the recordcorrespond to the record’s components, in the same order as they appear in the recordcorrespond to the record’s components, in the same order as they appear in the recordcorrespond to the record’s components, in the same order as they appear in the record declaration. Additional information can be extracted from eachdeclaration. Additional information can be extracted from eachdeclaration. Additional information can be extracted from eachdeclaration. Additional information can be extracted from each RecordComponent in thein thein thein the array, including its name, type, generic type, annotations, and itsarray, including its name, type, generic type, annotations, and itsarray, including its name, type, generic type, annotations, and itsarray, including its name, type, generic type, annotations, and its accessoraccessoraccessoraccessor method.method.method.method. The methodThe methodThe methodThe method isRecordisRecordisRecordisRecord() returns true if the given class was declared as a record.() returns true if the given class was declared as a record.() returns true if the given class was declared as a record.() returns true if the given class was declared as a record. ((((Compare with isEnum().).).).) Copyright © 2020 Oracle and/or its affiliates.
  • 26. Packaging Tool (Incubator) What is jpackage? • A JDK command line tool for packaging self-contained Java applications • Meant for Java application developers (not end users) • Input: a pre-built Java application, a Java runtime • Output: a native application package • Supported on: Linux, macOS, Windows • Provides a straightforward way to give the end user a natural installation experience on their platform • Defined by JEP 343: • https://openjdk.java.net/jeps/343 Copyright © 2020 Oracle and/or its affiliates.
  • 27. Why do we need jpackage? (1) • As of JDK 11: • Shared, auto-updated Java runtime (System JRE) no longer available • Java Web Start / applets are gone (and incomplete without the above) • New deployment model: bundled application + Java runtime • jpackage takes a Java runtime and your application, and creates a native package that you can distribute • jpackage runs jlink to create runtime, including application if modular • Developer can run jlink prior to jpackage for additional customization Copyright © 2020 Oracle and/or its affiliates.
  • 28. Why do we need jpackage? (2) • jlink provides part of the puzzle • Creates a custom Java runtime from the JDK • can add additional library or application modules • can exclude unneeded modules • same file system layout as the JDK • Developers can copy that plus their app and zip it up • but this is not a “ready-to-distribute” bundle • it's a collection of files, not an installable package or application • no system integration • What then? • Today Java developers “roll their own” using various third-party tools Copyright © 2020 Oracle and/or its affiliates.
  • 29. Where does jlink fit in? • Use jlink to create a custom runtime image: • Include only the modules you need • Add your own modules or library modules • jpackage will run jlink for you in most cases, but you can run it directly for more control over the Java runtime image you use Copyright © 2020 Oracle and/or its affiliates.
  • 30. Using jlink // Custom runtime with only the java.base module jlink --output my-jdk --add-modules java.base // Java runtime with the specified modules (includes java.base) jlink --output my-jdk --add-modules java.desktop,java.datatransfer // Java runtime with your modular application and its dependencies // Strip unneeded files jlink --output my-jdk --module-path mymod.jar --add-modules mymod --no-man-pages --no-header-files --strip-native-commands Copyright © 2020 Oracle and/or its affiliates.
  • 31. Features of jpackage (1) • Can be used to package: • Desktop apps • Command line apps • Creation of an application image • Support the following native packaging formats: • Linux: rpm (Red Hat), deb (Debian) • Mac: dmg, pkg • Windows: exe, msi • Specify JDK / app args that will be used when launching the app • Can be invoked from command line, or via the ToolProvider API Copyright © 2020 Oracle and/or its affiliates.
  • 32. Features of jpackage (2) • Package applications that integrate into the native platform: • Set file associations to launch app when file with associated suffix is opened • Launching from platform-specific menu group, e.g., Start menu on Windows • Desktop shortcuts • Option to specify update rules for installable packages (such as in rpm/deb) • Multiple launchers can be created from the same application image • List of required tools: • Linux (Red Hat) : rpmutil (4.0d or later) • Linux (Ubuntu) : dpkg, fakeroot • macOS: XCode command line tools • Windows: WiX Toolset (3.0 or later) Copyright © 2020 Oracle and/or its affiliates.
  • 33. Features of jpackage (3) • What does jpackage not do? • Does not solve how to get the platform installer to the user • no browser / web integration • No cross-platform deployment • No cross-compilation (e.g., must run on macOS to produce dmg) • No support for jnlp • JNLPConverter demo can ease transition: • Takes a jnlp file + resources (jar files) runs jpackage • Doesn’t handle all cases, but will help you convert Copyright © 2020 Oracle and/or its affiliates.
  • 34. JEP349: JFR Event Streaming (1) • ExposeExposeExposeExpose JDK Flight Recorder data for continuousJDK Flight Recorder data for continuousJDK Flight Recorder data for continuousJDK Flight Recorder data for continuous monitoringmonitoringmonitoringmonitoring • GoalsGoalsGoalsGoals  ProvideProvideProvideProvide an API for the continuous consumption of JFR data on disk, both for inan API for the continuous consumption of JFR data on disk, both for inan API for the continuous consumption of JFR data on disk, both for inan API for the continuous consumption of JFR data on disk, both for in---- process and outprocess and outprocess and outprocess and out----ofofofof----processprocessprocessprocess applicationsapplicationsapplicationsapplications  RecordRecordRecordRecord the same set of events as in the nonthe same set of events as in the nonthe same set of events as in the nonthe same set of events as in the non----streaming case, with overhead lessstreaming case, with overhead lessstreaming case, with overhead lessstreaming case, with overhead less than 1% ifthan 1% ifthan 1% ifthan 1% if possiblepossiblepossiblepossible  EventEventEventEvent streaming must be able to costreaming must be able to costreaming must be able to costreaming must be able to co----exist with nonexist with nonexist with nonexist with non----streaming recordings, bothstreaming recordings, bothstreaming recordings, bothstreaming recordings, both disk and memorydisk and memorydisk and memorydisk and memory basedbasedbasedbased • NonNonNonNon----GoalsGoalsGoalsGoals  ProvideProvideProvideProvide synchronous callbacks forsynchronous callbacks forsynchronous callbacks forsynchronous callbacks for consumersconsumersconsumersconsumers  AllowAllowAllowAllow consumption of inconsumption of inconsumption of inconsumption of in----memorymemorymemorymemory recordingsrecordingsrecordingsrecordings Copyright © 2020 Oracle and/or its affiliates.
  • 35. JEP349: JFR Event Streaming (2) The following example prints the overall CPU usage and locks contended for moreThe following example prints the overall CPU usage and locks contended for moreThe following example prints the overall CPU usage and locks contended for moreThe following example prints the overall CPU usage and locks contended for more than 10than 10than 10than 10 msmsmsms try (var rs = new RecordingStream()) { rs.enable("jdk.CPULoad").withPeriod(Duration.ofSeconds(1)); rs.enable("jdk.JavaMonitorEnter").withThreshold(Duration.ofMillis(10)); rs.onEvent("jdk.CPULoad", event -> { System.out.println(event.getFloat("machineTotal")); }); rs.onEvent("jdk.JavaMonitorEnter", event -> { System.out.println(event.getClass("monitorClass")); }); rs.start(); } Copyright © 2020 Oracle and/or its affiliates.
  • 36. JEP349: JFR Event Streaming (3) TheTheTheThe RecordingStreamRecordingStreamRecordingStreamRecordingStream class implements the interfaceclass implements the interfaceclass implements the interfaceclass implements the interface jdk.jfr.consumer.EventStreamjdk.jfr.consumer.EventStreamjdk.jfr.consumer.EventStreamjdk.jfr.consumer.EventStream that provides a uniform way to filter and consume eventsthat provides a uniform way to filter and consume eventsthat provides a uniform way to filter and consume eventsthat provides a uniform way to filter and consume events regardless if the source is a live stream or a file onregardless if the source is a live stream or a file onregardless if the source is a live stream or a file onregardless if the source is a live stream or a file on diskdiskdiskdisk public interface EventStream extends AutoCloseable { public static EventStream openRepository(); public static EventStream openRepository(Path directory); public static EventStream openFile(Path file); void setStartTime(Instant startTime); void setEndTime(Instant endTime); void setOrdered(boolean ordered); void setReuse(boolean reuse); void onEvent(Consumer<RecordedEvent> handler); void onEvent(String eventName, Consumer<RecordedEvent handler); void onFlush(Runnable handler); void onClose(Runnable handler); void onError(Runnable handler); void remove(Object handler); void start(); void startAsync(); void awaitTermination(); void awaitTermination(Duration duration); void close(); } Copyright © 2020 Oracle and/or its affiliates.
  • 37. JEP358: Helpful NullPointerExceptions (1) • ImproveImproveImproveImprove the usability ofthe usability ofthe usability ofthe usability of NullPointerExceptionsNullPointerExceptionsNullPointerExceptionsNullPointerExceptions generated by the JVM bygenerated by the JVM bygenerated by the JVM bygenerated by the JVM by describing precisely which variable wasdescribing precisely which variable wasdescribing precisely which variable wasdescribing precisely which variable was nullnullnullnull • TheTheTheThe JVM throws aJVM throws aJVM throws aJVM throws a NullPointerExceptionNullPointerExceptionNullPointerExceptionNullPointerException (NPE) at the point in a program(NPE) at the point in a program(NPE) at the point in a program(NPE) at the point in a program where code tries to dereference a null reference. By analyzing thewhere code tries to dereference a null reference. By analyzing thewhere code tries to dereference a null reference. By analyzing thewhere code tries to dereference a null reference. By analyzing the program's bytecode instructions, the JVM will determine precisely whichprogram's bytecode instructions, the JVM will determine precisely whichprogram's bytecode instructions, the JVM will determine precisely whichprogram's bytecode instructions, the JVM will determine precisely which variable was null, and describe the variable (in terms of source code) withvariable was null, and describe the variable (in terms of source code) withvariable was null, and describe the variable (in terms of source code) withvariable was null, and describe the variable (in terms of source code) with a nulla nulla nulla null----detail message in the NPE. The nulldetail message in the NPE. The nulldetail message in the NPE. The nulldetail message in the NPE. The null----detail message will then bedetail message will then bedetail message will then bedetail message will then be shown in the JVM's message, alongside the method, filename, and lineshown in the JVM's message, alongside the method, filename, and lineshown in the JVM's message, alongside the method, filename, and lineshown in the JVM's message, alongside the method, filename, and line numbernumbernumbernumber.... • MittelsMittelsMittelsMittels ProgrammProgrammProgrammProgramm----ByteCodeByteCodeByteCodeByteCode----CommandCommandCommandCommand----AnalyseAnalyseAnalyseAnalyse erkennterkennterkennterkennt die JVM,die JVM,die JVM,die JVM, welchewelchewelchewelche Variable den Wert NullVariable den Wert NullVariable den Wert NullVariable den Wert Null ergibtergibtergibtergibt Copyright © 2020 Oracle and/or its affiliates.
  • 38. JEP358: Helpful NullPointerExceptions (2) TheTheTheThe JVM displays an exception message on the same line as the exception type, which can result in long lines. ForJVM displays an exception message on the same line as the exception type, which can result in long lines. ForJVM displays an exception message on the same line as the exception type, which can result in long lines. ForJVM displays an exception message on the same line as the exception type, which can result in long lines. For readability in a web browser, this JEP shows the nullreadability in a web browser, this JEP shows the nullreadability in a web browser, this JEP shows the nullreadability in a web browser, this JEP shows the null----detail message on a second line, after the exception type.detail message on a second line, after the exception type.detail message on a second line, after the exception type.detail message on a second line, after the exception type. For example, an NPE from the assignment statementFor example, an NPE from the assignment statementFor example, an NPE from the assignment statementFor example, an NPE from the assignment statement a.ia.ia.ia.i = 99; would generate this message:= 99; would generate this message:= 99; would generate this message:= 99; would generate this message: Exception in thread "main" java.lang.NullPointerException: Cannot assign field "i" because "a" is null at Prog.main(Prog.java:5) If the more complex statementIf the more complex statementIf the more complex statementIf the more complex statement a.b.c.ia.b.c.ia.b.c.ia.b.c.i = 99; throws an NPE, the message would dissect the statement and pinpoint= 99; throws an NPE, the message would dissect the statement and pinpoint= 99; throws an NPE, the message would dissect the statement and pinpoint= 99; throws an NPE, the message would dissect the statement and pinpoint the cause by showing the full access path which led up to the null:the cause by showing the full access path which led up to the null:the cause by showing the full access path which led up to the null:the cause by showing the full access path which led up to the null: Exception in thread "main" java.lang.NullPointerException: Cannot read field "c" because "a.b" is null at Prog.main(Prog.java:5) Giving the full access path is more helpful than giving just the name of the null field because it helps the developer toGiving the full access path is more helpful than giving just the name of the null field because it helps the developer toGiving the full access path is more helpful than giving just the name of the null field because it helps the developer toGiving the full access path is more helpful than giving just the name of the null field because it helps the developer to navigate a line of complex source code, especially if the line of code uses the same name multiple times.navigate a line of complex source code, especially if the line of code uses the same name multiple times.navigate a line of complex source code, especially if the line of code uses the same name multiple times.navigate a line of complex source code, especially if the line of code uses the same name multiple times. Copyright © 2020 Oracle and/or its affiliates.
  • 40. JDK 15 (JSR 390) Features - JEP’s • 339:339:339:339: EdwardsEdwardsEdwardsEdwards----Curve Digital Signature Algorithm (Curve Digital Signature Algorithm (Curve Digital Signature Algorithm (Curve Digital Signature Algorithm (EdDSAEdDSAEdDSAEdDSA)))) [New][New][New][New] • 360360360360:::: Sealed Classes (PreviewSealed Classes (PreviewSealed Classes (PreviewSealed Classes (Preview)))) [Looking Forward][Looking Forward][Looking Forward][Looking Forward] • 371371371371:::: Hidden ClassesHidden ClassesHidden ClassesHidden Classes [New[New[New[New]]]] • 372372372372:::: Remove theRemove theRemove theRemove the NashornNashornNashornNashorn JavaScript EngineJavaScript EngineJavaScript EngineJavaScript Engine [[[[DeprecationsDeprecationsDeprecationsDeprecations &&&& Removals]Removals]Removals]Removals] • 373373373373:::: ReimplementReimplementReimplementReimplement the Legacythe Legacythe Legacythe Legacy DatagramSocketDatagramSocketDatagramSocketDatagramSocket APIAPIAPIAPI [Modernizing][Modernizing][Modernizing][Modernizing] • 374374374374:::: Disable and Deprecate Biased LockingDisable and Deprecate Biased LockingDisable and Deprecate Biased LockingDisable and Deprecate Biased Locking [[[[DeprecationsDeprecationsDeprecationsDeprecations &&&& Removals]Removals]Removals]Removals] • 375375375375:::: Pattern Matching forPattern Matching forPattern Matching forPattern Matching for instanceofinstanceofinstanceofinstanceof (Second Preview)(Second Preview)(Second Preview)(Second Preview) [[[[Looking Forward]Looking Forward]Looking Forward]Looking Forward] • 377377377377:::: ZGC: A Scalable LowZGC: A Scalable LowZGC: A Scalable LowZGC: A Scalable Low----Latency Garbage CollectorLatency Garbage CollectorLatency Garbage CollectorLatency Garbage Collector [Added to the Standard[Added to the Standard[Added to the Standard[Added to the Standard]]]] • 378378378378:::: TextTextTextText BlocksBlocksBlocksBlocks [Added to the Standard[Added to the Standard[Added to the Standard[Added to the Standard]]]] • 379379379379:::: Shenandoah: A LowShenandoah: A LowShenandoah: A LowShenandoah: A Low----PausePausePausePause----Time Garbage CollectorTime Garbage CollectorTime Garbage CollectorTime Garbage Collector [[[[Added to theAdded to theAdded to theAdded to the StandardStandardStandardStandard]]]] • 381381381381:::: Remove the Solaris and SPARCRemove the Solaris and SPARCRemove the Solaris and SPARCRemove the Solaris and SPARC PortsPortsPortsPorts [Deprecations & Removals][Deprecations & Removals][Deprecations & Removals][Deprecations & Removals] • 383383383383:::: ForeignForeignForeignForeign----Memory Access API (Second Incubator)Memory Access API (Second Incubator)Memory Access API (Second Incubator)Memory Access API (Second Incubator) [[[[Looking Forward]Looking Forward]Looking Forward]Looking Forward] • 384384384384:::: Records (Second Preview)Records (Second Preview)Records (Second Preview)Records (Second Preview) [[[[Looking Forward]Looking Forward]Looking Forward]Looking Forward] • 385385385385:::: Deprecate RMI Activation for RemovalDeprecate RMI Activation for RemovalDeprecate RMI Activation for RemovalDeprecate RMI Activation for Removal [[[[DeprecationsDeprecationsDeprecationsDeprecations &&&& Removals]Removals]Removals]Removals]
  • 41. JEP 339: Edwards-Curve Digital Signature Algorithm (EdDSA) • EdDSA is a modern elliptic curve signature scheme that has several advantages over the existing signature schemes in the JDK. The primary goal of this JEP is an implementation of this scheme as standardized in RFC 8032. This new signature scheme does not replace ECDSA. • Platform-independent implementation of EdDSA with better performance than the existing ECDSA implementation (which uses native C code) at the same security strength • Aims to prevent side-channel attacks • Timing is independent of secrets • Will not branch on secrets
  • 42. JEP 371: Hidden Classes • Hidden classes that cannot be used directly by the bytecode of other classes • Hidden classes are intended for use by frameworks that generate classes at run time and use them indirectly, via reflection • A hidden class may be defined as a member of an access control nest, and may be unloaded independently of other classes • Allows to deprecate the nonnonnonnon----standard APIstandard APIstandard APIstandard API sun.misc.Unsafe::defineAnonymousClass, with the intent to deprecate it for removal in a future release
  • 43. JEP 378: Text Blocks Previewed in JDK 13 and JDK 14 • A text block is a multi-line string literal that avoids the need for most escape sequences, automatically formats the string in a predictable way, and gives the developer control over the format when desired. • To allow finer control of the processing of newlines and white spaces, this second preview introduces two new escape sequences This JEP represents content from Project Amber, implementing small language changes to the Java platform.
  • 44. JEP 377: Z Garbage Collector Experimental no more • Change the Z Garbage Collector from experimental feature into a product feature • ZGC, is a concurrent, NUMA-aware, scalable low-latency garbage collector, geared to delivery < 10ms GC pauses even on multi- terabytes heaps • The ZGC pause times (ms) are significant lower than parallel or G1 • -XX:+UnlockExperimentalVMOptions option no longer needed • The default GC remains G1
  • 45. JEP 379: Shenandoah GC No longer experimental • Change the Shenandoah Garbage Collector from experimental feature into a product feature • -XX:+UnlockExperimentalVMOptions option no longer needed • The default GC remains G1
  • 46. JEP 373: Reimplement the Legacy DatagramSocket API • Replace the underlying implementations of the java.net.DatagramSocket and java.net.MulticastSocket APIs with simpler and more modern implementations that are easy to maintain and debug. • The new implementations will be easy to adapt to work with virtual threads, currently being explored in Project Loom. This is a follow-on to JEP 353, which already reimplemented the legacy Socket API. • To reduce the risk of switching the implementation after more than twenty years, the legacy implementation will not be removed. A JDK- specific system property, jdk.net.usePlainDatagramSocketImpl, is introduced to configure the JDK to use the legacy implementation
  • 47. JEP 360: Sealed Classes (Preview) (1) • Sealed classes and interfaces restrict which other classes or interfaces may extend or implement them. • Allow the author of a class or interface to control which code is reponsible for implementating it. • Provide a more declarative way than access modifiers to restrict the use of a superclass. • Support future directions in pattern matching by underpinning the exhaustive analysis of patterns. This is from Project Amber Preview features are fully specified, fully implemented, and yet impermanent. Available in a JDK feature release to provoke developer feedback. May lead to it becoming permanent in a future Java SE Platform. Requires a flag to enable at compile and at runtime.
  • 48. JEP 360: Sealed Classes (Preview) (2) Constraints • The sealed class and its permitted subclasses must belong to the same module, and, if declared in an unnamed module, the same package. • Every permitted subclass must directly extend the sealed class. • Every permitted subclass must choose a modifier to describe how it continues the sealing initiated by its superclass; final, sealed, or non- sealed (a sealed class cannot prevent its permitted subclasses from doing this.) This is from Project Amber Preview features are fully specified, fully implemented, and yet impermanent. Available in a JDK feature release to provoke developer feedback. May lead to it becoming permanent in a future Java SE Platform. Requires a flag to enable at compile and at runtime.
  • 49. JEP 375: Pattern Matching for instanceof Second Preview • Enhance the Java programming language with pattern matching for the instanceof operator. • Pattern matching allows common logic in a program, namely the conditional extraction of components from objects, to be expressed more concisely and safely. • This is a preview language feature in JDK 15. This is from Project Amber Preview features are fully specified, fully implemented, and yet impermanent. Available in a JDK feature release to provoke developer feedback. May lead to it becoming permanent in a future Java SE Platform. Requires a flag to enable at compile and at runtime.
  • 50. JEP 384: Records Second Preview • Records provide a compact syntax for declaring classes which are transparent holders for shallowly (flat) immutable data This is from Project Amber Preview features are fully specified, fully implemented, and yet impermanent. Available in a JDK feature release to provoke developer feedback. May lead to it becoming permanent in a future Java SE Platform. Requires a flag to enable at compile and at runtime.
  • 51. JEP 384: Records Local Records – Added in the Second Preview • In the example, the aggregation of a merchant and a monthly sales figure is modeled with a local record, MerchantSales. Using this record improves the readability of the stream operations which follow: List<Merchant> findTopMerchants(List<Merchant> merchants, int month) { // Local record record MerchantSales(Merchant merchant, double sales) {} return merchants.stream() .map(merchant -> new MerchantSales(merchant, computeSales(merchant, month))) .sorted((m1, m2) -> Double.compare(m2.sales(), m1.sales())) .map(MerchantSales::merchant) .collect(toList()); }
  • 52. JEP 383: Foreign-Memory Access API Second Incubator • API to allow Java programs to safely and efficiently access foreign memory outside of the Java heap. • Aimes to provide a valid alternative to the main avenues by which Java programs access foreign memory today, namely java.nio.ByteBuffer and sun.misc.Unsafe. First major content from Project Panama, a project with the goal of improving connections between Java and non-Java API‘s Incubator modules are a means of putting non-final API‘s and non-final tools in the hands of developers, while the API‘s/tools progress towards either finalization or removal in a future release.
  • 53. Deprecations • Disable and Deprecate Biased Locking (JEP 374) • RMI Activation for Removal (JEP 385)
  • 54. Removals • Nashorn Java Script Engine (JEP 372) ‒ Deprecated for removal since JDK 11 • Solaris and SPARC ports (JEP 381) ‒ Deprecated for removal with JDK 14 • The source code for these features remains availble in OpenJDK
  • 56. Java SE Support Roadmap* http://www.oracle.com/technetwork/java/eolhttp://www.oracle.com/technetwork/java/eolhttp://www.oracle.com/technetwork/java/eolhttp://www.oracle.com/technetwork/java/eol----135779.html135779.html135779.html135779.html
  • 57. Java SE Support Roadmap* Web Deployment Technology and JavaFX
  • 59. Migrating to Oracle JDK 15 - Migration Guide (1) https://https://https://https://docs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.html The JDK 15 migration guideThe JDK 15 migration guideThe JDK 15 migration guideThe JDK 15 migration guide contains the following sections:contains the following sections:contains the following sections:contains the following sections: • Significant Changes in the JDKSignificant Changes in the JDKSignificant Changes in the JDKSignificant Changes in the JDK • Preparing For MigrationPreparing For MigrationPreparing For MigrationPreparing For Migration • Migrating From JDK 8 to Later JDK ReleasesMigrating From JDK 8 to Later JDK ReleasesMigrating From JDK 8 to Later JDK ReleasesMigrating From JDK 8 to Later JDK Releases • Next StepsNext StepsNext StepsNext Steps
  • 60. Migrating to Oracle JDK 15 - Migration Guide (2) https://https://https://https://docs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.html Prepare for MigrationPrepare for MigrationPrepare for MigrationPrepare for Migration • Download JDK 15 • Run Your Program Before Recompiling • Update Third-Party Libraries • Compile Your Application if Needed • Run jdeps on Your Code
  • 61. Oracle JDK 15 – Significant Changes in the JDK https://https://https://https://docs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.html • SeeSeeSeeSee JDK 15 Release Notes for the complete list of new features and enhancements inJDK 15 Release Notes for the complete list of new features and enhancements inJDK 15 Release Notes for the complete list of new features and enhancements inJDK 15 Release Notes for the complete list of new features and enhancements in JDK 15JDK 15JDK 15JDK 15.... • TheTheTheThe following are some of the updates in Java SE 15 and JDK 15:following are some of the updates in Java SE 15 and JDK 15:following are some of the updates in Java SE 15 and JDK 15:following are some of the updates in Java SE 15 and JDK 15: • TextTextTextText Blocks, first previewed in Java SE 13, is a permanent feature in this release and can be usedBlocks, first previewed in Java SE 13, is a permanent feature in this release and can be usedBlocks, first previewed in Java SE 13, is a permanent feature in this release and can be usedBlocks, first previewed in Java SE 13, is a permanent feature in this release and can be used without enabling preview features.without enabling preview features.without enabling preview features.without enabling preview features. • TextTextTextText blocks are multiline string literals that avoid the need for most escape sequences, automaticallyblocks are multiline string literals that avoid the need for most escape sequences, automaticallyblocks are multiline string literals that avoid the need for most escape sequences, automaticallyblocks are multiline string literals that avoid the need for most escape sequences, automatically format the string in a predictable way, and give the developer control over the format when desired.format the string in a predictable way, and give the developer control over the format when desired.format the string in a predictable way, and give the developer control over the format when desired.format the string in a predictable way, and give the developer control over the format when desired. See JEP 378: Text Blocks and Programmer's Guide to Text Blocks.See JEP 378: Text Blocks and Programmer's Guide to Text Blocks.See JEP 378: Text Blocks and Programmer's Guide to Text Blocks.See JEP 378: Text Blocks and Programmer's Guide to Text Blocks. • TheTheTheThe Z Garbage Collector (ZGC) is ready to use in production and no longer an experimental feature.Z Garbage Collector (ZGC) is ready to use in production and no longer an experimental feature.Z Garbage Collector (ZGC) is ready to use in production and no longer an experimental feature.Z Garbage Collector (ZGC) is ready to use in production and no longer an experimental feature. Enable ZGC by using the commandEnable ZGC by using the commandEnable ZGC by using the commandEnable ZGC by using the command----line optionline optionline optionline option ----XX:+XX:+XX:+XX:+UseZGCUseZGCUseZGCUseZGC. See JEP 377: ZGC: A Scalable Low. See JEP 377: ZGC: A Scalable Low. See JEP 377: ZGC: A Scalable Low. See JEP 377: ZGC: A Scalable Low---- Latency Garbage Collector (Production).Latency Garbage Collector (Production).Latency Garbage Collector (Production).Latency Garbage Collector (Production). • HiddenHiddenHiddenHidden classes are classes that cannot be used directly by the bytecode of other classes. Hiddenclasses are classes that cannot be used directly by the bytecode of other classes. Hiddenclasses are classes that cannot be used directly by the bytecode of other classes. Hiddenclasses are classes that cannot be used directly by the bytecode of other classes. Hidden classes are intended for use by frameworks that generate classes at run time and use themclasses are intended for use by frameworks that generate classes at run time and use themclasses are intended for use by frameworks that generate classes at run time and use themclasses are intended for use by frameworks that generate classes at run time and use them indirectly through reflection. See JEP 371: Hidden Classes.indirectly through reflection. See JEP 371: Hidden Classes.indirectly through reflection. See JEP 371: Hidden Classes.indirectly through reflection. See JEP 371: Hidden Classes.
  • 62. Oracle JDK 15 – Preview and Incubator Features https://https://https://https://docs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.htmldocs.oracle.com/en/java/javase/15/migrate/index.html • SealedSealedSealedSealed ClassesClassesClassesClasses is a Java language preview feature. Sealed classes and interfaces restrict which otheris a Java language preview feature. Sealed classes and interfaces restrict which otheris a Java language preview feature. Sealed classes and interfaces restrict which otheris a Java language preview feature. Sealed classes and interfaces restrict which other classes or interfaces may extend or implement them. See JEP 360: Sealed Classes (Preview) and Sealedclasses or interfaces may extend or implement them. See JEP 360: Sealed Classes (Preview) and Sealedclasses or interfaces may extend or implement them. See JEP 360: Sealed Classes (Preview) and Sealedclasses or interfaces may extend or implement them. See JEP 360: Sealed Classes (Preview) and Sealed Classes in Java Platform, Standard Edition Java Language Updates guide.Classes in Java Platform, Standard Edition Java Language Updates guide.Classes in Java Platform, Standard Edition Java Language Updates guide.Classes in Java Platform, Standard Edition Java Language Updates guide. • PatternPatternPatternPattern Matching forMatching forMatching forMatching for instanceofinstanceofinstanceofinstanceof, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re----previewed for this release.previewed for this release.previewed for this release.previewed for this release. This feature allows common logic in a program, namely the conditional extraction of components fromThis feature allows common logic in a program, namely the conditional extraction of components fromThis feature allows common logic in a program, namely the conditional extraction of components fromThis feature allows common logic in a program, namely the conditional extraction of components from objects, to be expressed more concisely and safely. See JEP 375: Pattern Matching forobjects, to be expressed more concisely and safely. See JEP 375: Pattern Matching forobjects, to be expressed more concisely and safely. See JEP 375: Pattern Matching forobjects, to be expressed more concisely and safely. See JEP 375: Pattern Matching for instanceofinstanceofinstanceofinstanceof (Second Preview) and Pattern Matching for the(Second Preview) and Pattern Matching for the(Second Preview) and Pattern Matching for the(Second Preview) and Pattern Matching for the instanceofinstanceofinstanceofinstanceof in Java Platform, Standard Edition Javain Java Platform, Standard Edition Javain Java Platform, Standard Edition Javain Java Platform, Standard Edition Java Language Updates guide.Language Updates guide.Language Updates guide.Language Updates guide. • RecordsRecordsRecordsRecords, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re, a preview feature from Java SE 14, is re----previewed for this release. Records are classes that actpreviewed for this release. Records are classes that actpreviewed for this release. Records are classes that actpreviewed for this release. Records are classes that act as transparent carriers for immutable data. See JEP 384: Records (Second Preview) and Record Classesas transparent carriers for immutable data. See JEP 384: Records (Second Preview) and Record Classesas transparent carriers for immutable data. See JEP 384: Records (Second Preview) and Record Classesas transparent carriers for immutable data. See JEP 384: Records (Second Preview) and Record Classes in Java Platform, Standard Edition Java Language Updates guide.in Java Platform, Standard Edition Java Language Updates guide.in Java Platform, Standard Edition Java Language Updates guide.in Java Platform, Standard Edition Java Language Updates guide. • TheTheTheThe Foreign Memory Access APIForeign Memory Access APIForeign Memory Access APIForeign Memory Access API allows Java programs to efficiently and safely access foreign memoryallows Java programs to efficiently and safely access foreign memoryallows Java programs to efficiently and safely access foreign memoryallows Java programs to efficiently and safely access foreign memory outside of the Java heap. See JEP 383: Foreignoutside of the Java heap. See JEP 383: Foreignoutside of the Java heap. See JEP 383: Foreignoutside of the Java heap. See JEP 383: Foreign----Memory Access API (Second Incubator).Memory Access API (Second Incubator).Memory Access API (Second Incubator).Memory Access API (Second Incubator).
  • 64. Run smaller images – Remove parts of Java you don’t use JavaJavaJavaJava SESESESE 15151515 with jlinkwith jlinkwith jlinkwith jlink vsvsvsvs.... JavaJavaJavaJava SESESESE 15151515 with JREwith JREwith JREwith JRE
  • 65. NewNewNewNew Project:Project:Project:Project: Leyden (1)Leyden (1)Leyden (1)Leyden (1) • New Project, Leyden, whose primary goal will be to address the long-term pain points of Java’s slow startup time, slow time to peak performance, and large footprint. • Leyden will address these pain points by introducing a concept of _static images_ to the Java Platform, and to the JDK. – A static image is a standalone program, derived from an application, which runs that application -- and no other. – A static image is a closed world: It cannot load classes from outside the image, nor can it spin new bytecodes at run time.
  • 66. NewNewNewNew Project:Project:Project:Project: Leyden (2)Leyden (2)Leyden (2)Leyden (2) • Project Leyden will take inspiration from past efforts to explore this space, including the GNU Compiler for Java and the Native Image feature of GraalVM. Leyden will add static images to the Java Platform Specification, and we expect that GraalVM will evolve to implement that specification. Developers who use only the standard, specified static-image feature will then be able to switch with ease between Leyden (in the JDK), Native Image (in GraalVM), and whatever other conforming implementations may arise, choosing amongst tradeoffs of compile time, startup time, and image size. • We do not intend to implement Leyden by merging the Native Image code from GraalVM into the JDK. Leyden will, rather, be based upon existing components in the JDK such as the HotSpot JVM, the `jaotc` ahead-of-time compiler, application class-data sharing, and the `jlink` linking tool.
  • 68. JDK 16 (JSR 391) Features – JEP’s  JEPs proposed to target JDK 16JEPs proposed to target JDK 16JEPs proposed to target JDK 16JEPs proposed to target JDK 16 • 380:380:380:380: UnixUnixUnixUnix----Domain Socket ChannelsDomain Socket ChannelsDomain Socket ChannelsDomain Socket Channels review ends 2020/10/27review ends 2020/10/27review ends 2020/10/27review ends 2020/10/27 • 392:392:392:392: PackagingPackagingPackagingPackaging ToolToolToolTool review ends 2020/10/30review ends 2020/10/30review ends 2020/10/30review ends 2020/10/30 • 393:393:393:393: ForeignForeignForeignForeign----Memory Access API (ThirdMemory Access API (ThirdMemory Access API (ThirdMemory Access API (Third Incubator)Incubator)Incubator)Incubator) review ends 2020/11/02review ends 2020/11/02review ends 2020/11/02review ends 2020/11/02 • 395:395:395:395: RecordsRecordsRecordsRecords review ends 2020/10/27review ends 2020/10/27review ends 2020/10/27review ends 2020/10/27  JEPsJEPsJEPsJEPs targeted to JDK 16, so fartargeted to JDK 16, so fartargeted to JDK 16, so fartargeted to JDK 16, so far • 338:338:338:338: Vector API (Incubator)Vector API (Incubator)Vector API (Incubator)Vector API (Incubator) • 347:347:347:347: Enable C++14 Language FeaturesEnable C++14 Language FeaturesEnable C++14 Language FeaturesEnable C++14 Language Features • 357:357:357:357: Migrate from Mercurial toMigrate from Mercurial toMigrate from Mercurial toMigrate from Mercurial to GitGitGitGit • 369:369:369:369: Migrate to GitHubMigrate to GitHubMigrate to GitHubMigrate to GitHub • 376:376:376:376: ZGC: Concurrent ThreadZGC: Concurrent ThreadZGC: Concurrent ThreadZGC: Concurrent Thread----Stack ProcessingStack ProcessingStack ProcessingStack Processing • 386:386:386:386: Alpine Linux PortAlpine Linux PortAlpine Linux PortAlpine Linux Port • 387:387:387:387: ElasticElasticElasticElastic MetaspaceMetaspaceMetaspaceMetaspace • 388:388:388:388: Windows/AArch64 PortWindows/AArch64 PortWindows/AArch64 PortWindows/AArch64 Port
  • 69. Project Skara (1) • JEP 357: Migrate from Mercurial toJEP 357: Migrate from Mercurial toJEP 357: Migrate from Mercurial toJEP 357: Migrate from Mercurial to GitGitGitGit • Migrate theMigrate theMigrate theMigrate the OpenJDKOpenJDKOpenJDKOpenJDK Community's source code repositories from Mercurial (hg) toCommunity's source code repositories from Mercurial (hg) toCommunity's source code repositories from Mercurial (hg) toCommunity's source code repositories from Mercurial (hg) to GitGitGitGit • ProposedProposedProposedProposed totototo target for JDK 16target for JDK 16target for JDK 16target for JDK 16 • GoalsGoalsGoalsGoals • MigrateMigrateMigrateMigrate all singleall singleall singleall single----repositoryrepositoryrepositoryrepository OpenJDKOpenJDKOpenJDKOpenJDK Projects from Mercurial toProjects from Mercurial toProjects from Mercurial toProjects from Mercurial to GitGitGitGit • PreservePreservePreservePreserve all version control history, including tagsall version control history, including tagsall version control history, including tagsall version control history, including tags • ReformatReformatReformatReformat commit messages according tocommit messages according tocommit messages according tocommit messages according to GitGitGitGit best practicesbest practicesbest practicesbest practices • PortPortPortPort thethethethe jcheckjcheckjcheckjcheck,,,, webrevwebrevwebrevwebrev, and, and, and, and defpathdefpathdefpathdefpath tools totools totools totools to GitGitGitGit • CreateCreateCreateCreate a tool to translate between Mercurial anda tool to translate between Mercurial anda tool to translate between Mercurial anda tool to translate between Mercurial and GitGitGitGit hasheshasheshasheshashes
  • 70. Project Skara (2) • JEP 369: Migrate toJEP 369: Migrate toJEP 369: Migrate toJEP 369: Migrate to GitHubGitHubGitHubGitHub • HostHostHostHost thethethethe OpenJDKOpenJDKOpenJDKOpenJDK Community'sCommunity'sCommunity'sCommunity's GitGitGitGit repositories on GitHub. In concert with JEP 357 (Migrate from Mercurial torepositories on GitHub. In concert with JEP 357 (Migrate from Mercurial torepositories on GitHub. In concert with JEP 357 (Migrate from Mercurial torepositories on GitHub. In concert with JEP 357 (Migrate from Mercurial to GitGitGitGit), this), this), this), this would migrate all singlewould migrate all singlewould migrate all singlewould migrate all single----repositoryrepositoryrepositoryrepository OpenJDKOpenJDKOpenJDKOpenJDK Projects to GitHub, including both JDK feature releases and JDK updateProjects to GitHub, including both JDK feature releases and JDK updateProjects to GitHub, including both JDK feature releases and JDK updateProjects to GitHub, including both JDK feature releases and JDK update releases for versions 11 andreleases for versions 11 andreleases for versions 11 andreleases for versions 11 and laterlaterlaterlater • ProposedProposedProposedProposed totototo target for JDK 16target for JDK 16target for JDK 16target for JDK 16 • HostHostHostHost allallallall OpenJDKOpenJDKOpenJDKOpenJDK GitGitGitGit repositories at https://github.com/openjdkrepositories at https://github.com/openjdkrepositories at https://github.com/openjdkrepositories at https://github.com/openjdk//// • RunRunRunRun prepreprepre----commit checks (commit checks (commit checks (commit checks (jcheckjcheckjcheckjcheck) before every) before every) before every) before every pushpushpushpush • IntegrateIntegrateIntegrateIntegrate existingexistingexistingexisting OpenJDKOpenJDKOpenJDKOpenJDK servicesservicesservicesservices • EnableEnableEnableEnable multiple ways of interacting withmultiple ways of interacting withmultiple ways of interacting withmultiple ways of interacting with GitHubGitHubGitHubGitHub • EnsureEnsureEnsureEnsure that workflows structurally similar to the existing ethat workflows structurally similar to the existing ethat workflows structurally similar to the existing ethat workflows structurally similar to the existing e----mail andmail andmail andmail and webrevwebrevwebrevwebrev based workflows arebased workflows arebased workflows arebased workflows are supportedsupportedsupportedsupported • PreservePreservePreservePreserve and archive alland archive alland archive alland archive all metadatametadatametadatametadata • EnsureEnsureEnsureEnsure thatthatthatthat OpenJDKOpenJDKOpenJDKOpenJDK Community can always move to a different sourceCommunity can always move to a different sourceCommunity can always move to a different sourceCommunity can always move to a different source----code hostingcode hostingcode hostingcode hosting providerproviderproviderprovider • DoDoDoDo not require developers to installnot require developers to installnot require developers to installnot require developers to install OpenJDKOpenJDKOpenJDKOpenJDK specific tools in order tospecific tools in order tospecific tools in order tospecific tools in order to contributecontributecontributecontribute • DoDoDoDo not change thenot change thenot change thenot change the OpenJDKOpenJDKOpenJDKOpenJDK BylawsBylawsBylawsBylaws • DoDoDoDo not change thenot change thenot change thenot change the OpenJDKOpenJDKOpenJDKOpenJDK CensusCensusCensusCensus
  • 71. Key Java Platform Investments • Security & Vulnerability • Approachability & Continued language enhancements • Cloud Containers & Observability • Data optimization & Density • Predictability at Scale • Performance & Efficiency • Hardware Acceleration (GPU, NVM, etc.)
  • 72. Summary • Continuous delivery of innovations • The most exciting technical roadmap in many years • Need your help testing EA builds (jdk.java.net) Join andJoin andJoin andJoin and becomebecomebecomebecome anananan OpenJDKOpenJDKOpenJDKOpenJDK contributorcontributorcontributorcontributor OpenJDK.java.netOpenJDK.java.netOpenJDK.java.netOpenJDK.java.net Copyright © 2020 Oracle and/or its affiliates.
  • 73. Copyright © 2020 Oracle and/or its affiliates. Danke!Danke!Danke!Danke! Wolfgang.Weigend@oracle.comWolfgang.Weigend@oracle.comWolfgang.Weigend@oracle.comWolfgang.Weigend@oracle.com Twitter: @wolflookTwitter: @wolflookTwitter: @wolflookTwitter: @wolflook