Java SE versions

This section provides an overview of the Java SE versions. For each version, the JEPs are listed with a summary or short remark, splitting them into four sections:

  • new features: lists new language features.
  • jdk-internal: JDK internal features like improvements of the JVM, changes to garbage collectors, reimplementation of APIs, Java SE ports to plattforms and the like.
  • deprecated: deprecated Java SE features like deprecated APIs, ports, garbage collectors, etc.
  • removed: removed Java SE features like deprecated APIs, ports, garbage collectors, etc.

In the section some feature details, the most interesting features (certainly biased) are presented in short form. Where applicable, an introduction on how to use the new language feature is given (i.e. text blocks, sealed classes, switch expressions, pattern matching).

Java 8

created onOctober 13, 2022
general availability on 2014-03-18 The original schedule aimed to ship the release in early September 2013, but due to an increased focus on browser-related security issues that date was not achievable. ...

Java 9

created onOctober 7, 2022
last modified onOctober 8, 2022
general availability on 2017-09-22 JEPs Java 9 comes with a vast list of features. There are 91 JEPs listed in the features and schedule page for JDK 9 (see also JDK 9) . ...

Java 10

created onJuly 16, 2022
general availability on 2018-03-20 JEPs new features JEP state summary /remark JEP 286: Local-Variable Type Inference standard enhance the Java Language to extend type inference to declarations of local variables with initializers. JEP 314: Additional Unicode Language-Tag Extensions standard enhance java.util.Locale and related APIs to implement additional Unicode extensions of BCP 47 language tags. JEP 316: Heap Allocation on Alternative Memory Devices standard Enable the HotSpot VM to allocate the Java object heap on an alternative memory device, such as an NV-DIMM, specified by the user. JEP 317: Experimental Java-Based JIT Compiler standard can be enabled with -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler JEP 319: Root Certificates standard the cacerts keystore in a fresh installation of the JDK was previously empty. It now contains certs from various Root CAs such as DigiCert, Let’s encrypt and Trustwave. JEP 322: Time-Based Release Versioning standard revise the version-string scheme of the Java SE Platform and the JDK, and related versioning information, for present and future time-based release models. JDK internal JEP summary /remark JEP 296: Consolidate the JDK Forest into a Single Repository the numerous repositories of the JDK forest are combined into a single repository. JEP 304: Garbage Collector Interface improve the source code isolation of different garbage collectors by introducing a clean garbage collector (GC) interface. This is not meant to add or remove a GC. JEP 307: Parallel Full GC for G1 improve G1 worst-case latencies by making the full GC parallel. G1 is the default GC since Java 9 JEP 310: Application Class-Data Sharing to improve startup and footprint, extend the existing Class-Data Sharing (“CDS”) feature to allow application classes to be placed in the shared archive. JEP 312: Thread-Local Handshakes will help the VM achieve lower latency by reducing the number of global safepoints. deprecated none ...

Java 11

created onJuly 16, 2022
general availability on 2018-09-25 JEPs new features JEP state summary /remark JEP 181: Nest-Based Access Control standard introduce nests, an access-control context that aligns with the existing notion of nested types in the Java programming language. Nests allow classes that are logically part of the same code entity, but which are compiled to distinct class files, to access each other’s private members without the need for compilers to insert accessibility-broadening bridge methods. JEP 309: Dynamic Class-File Constants standard extend the Java class-file format to support a new constant-pool form, CONSTANT_Dynamic. JEP 318: Epsilon experimental a GC that handles memory allocation but does not implement any actual memory reclamation mechanism. Once the available Java heap is exhausted, the JVM will shut down. JEP 321: HTTP Client standard standardize the incubated HTTP Client API introduced in JDK 9, via JEP 110, and updated in JDK 10. JEP 323: Local-Variable Syntax for Lambda Parameters standard I prefer the implicitly typed lambda expressions as in Java SE 8 :) JEP 324: Key Agreement with Curve25519 and Curve448 standard more efficient and secure than the elliptic curve Diffie-Hellman (ECDH) scheme JEP 327: Unicode 10 standard Java SE 10 implements Unicode 8.0 JEP 328: Flight Recorder standard records events originating from applications, the JVM and the OS with an performance overhead of under 1%. intended for monitoring, profiling and troubleshooting of apps in production JEP 329: ChaCha20 and Poly1305 Cryptographic standard ChaCha20 is a relatively new stream cipher that can replace the older, insecure RC4 stream cipher. JEP 330: Launch Single-File Source-Code Programs standard you can now launch single file Java apps with a shebang JEP 331: Low-Overhead Heap Profiling standard low-overhead way of sampling Java heap allocations, accessible via JVMTI. JEP 332: Transport Layer Security (TLS) 1.3 standard implement version 1.3 of the Transport Layer Security (TLS) Protocol RFC 8446. JEP 333: ZGC, A Scalable Low-Latency Garbage Collector (Experimental) experimental the Z Garbage Collector, also known as ZGC, is a scalable low-latency garbage collector. JDK internal JEP summary /remark JEP 315: Improve Aarch64 Intrinsics specialized CPU architecture-specific code patterns improve the performance of user applications and benchmarks. deprecated JEP summary /remark JEP 335: Deprecate the Nashorn JavaScript Engine the nashorn engine is a complete implementation of the ECMAScript-262 5.1 standard. With the rapid pace at which ECMAScript language evolves, there’s not enough dev power to maintain Nashorn. Might get resurrected if there are enough devs to maintain a complete implementation of the ECMAScript standard. JEP 336: Deprecate the Pack200 Tools and API Pack200 is a compression scheme for JAR files, introduced in Java SE 5.0. Its file format is tightly coupled to the class file format and the JAR file format. Pack200 has been used especially to compress the JDK up to version 8 and applets. Applets are gone and Java 9 and later versions do not rely on Pack200. removed JEP summary /remark JEP 320: Remove the Java EE and CORBA Modules From the JEP: “There is no significant interest in developing modern applications with CORBA in Java.”. Yep, CORBA sucked from the time of its inception. some feature details JEP 318: Epsilon: A No-Op Garbage Collector (Experimental) A no-op GC is useful in the following scenarios: ...

Java 12

created onJuly 16, 2022
general availability on 2019-03-19 JEPs new features JEP state summary /remark JEP 189: Shenandoah, A Low-Pause-Time Garbage Collector (Experimental) experimental a GC which reduces GC pause times by doing evacuation work concurrently with the running Java threads. Pause times are independent of heap size, the goal is to never interrupt the running program for more than a handful of milliseconds. JEP 325: Switch Expressions (Preview) preview extended switch statement that can be used as either a statement or an expression. Both forms can use either a “traditional” or “simplified” scoping and control flow behavior. JEP 334: JVM Constants API standard an API to model nominal descriptions of key class-file and run-time artifacts, in particular constants that are loadable from the constant pool. JEP 344: Abortable Mixed Collections for G1 standard make all pauses in G1 abortable. JEP 346: Promptly Return Unused Committed Memory from G1 standard make G1 detect phases of Java heap under-utilization (“idle” phases), and automatically reduce the JVMs heap usage during that time. Tests with a prototype were quite impressive (see blow). JDK internal JEP summary /remark JEP 230: Microbenchmark Suite a basic suite of microbenchmarks in the JDK source code. Makes it easy for developers to run existing microbenchmarks and create new ones. JEP 340: One AArch64 Port, Not Two remove all of the sources related to the arm64 port while retaining the 32-bit ARM port and the 64-bit aarch64 port. JEP 341: Default CDS Archives enhance the JDK build process to generate a class data-sharing (CDS) archive, using the default class list, on 64-bit platforms. deprecated none ...

java 13

created onJuly 16, 2022
general availability on 2019-09-17 jeps new features jep state summary /remark jep 351: zgc, uncommit unused memory (Experimental) experimental zgc does not currently uncommit and return memory to the operating system, even when that memory has been unused for a long time. enhance zgc to return unused heap memory to the operating system. jep 354: switch expressions (Second Preview) second preview extended switch statement that can be used as either a statement or an expression. both forms can use either a “traditional” or “simplified” scoping and control flow behavior. see comments on ‘JEP 325: Switch Expressions (Preview)’ jep 355: text blocks (Preview) preview add text blocks to the java language. 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 format when desired. jdk internal jep summary /remark jep 350: dynamic cds archives extend application class-data sharing to allow the dynamic archiving of classes at the end of java application execution. the archived classes will include all loaded application classes and library classes that are not present in the default, base-layer cds archive. jep 353: reimplement the legacy socket api replace the underlying implementation used by the java.net.socket and java.net.serversocket apis with a simpler and more modern implementation that is easy to maintain and debug. deprecated none ...

Java 14

created onJuly 16, 2022
general availability on 2020-03-17 JEPs new features JEP state summary /remark JEP 305: Pattern Matching for instanceof (Preview) preview instanceof now saves you from explicit, verbose casts. JEP 343: Packaging Tool (Incubator) incubator create a tool for packaging self-contained Java applications, supporting native packaging formats to give end users a natural installation experience. JEP 349: JFR Event Streaming standard expose JDK Flight Recorder data for continuous monitoring. JEP 352: Non-Volatile Mapped Byte Buffers standard add new JDK-specific file mapping modes so that the FileChannel API can be used to create MappedByteBuffer instances that refer to non-volatile memory. With NVM, it is possible to create and update program state across program runs without the significant translation costs that persistent media normally imply. JEP 358: Helpful NullPointerExceptions standard NPE messages are now more specific about the cause than just listing the line number of the code where the unlucky consumer is. JEP 359: Records (Preview) preview a new kind of restricted class for data containers without boiler code. JEP 361: Switch Expressions standard extended switch statement that can be used as either a statement or an expression. both forms can use either a “traditional” or “simplified” scoping and control flow behavior. see comments on ‘JEP 325: Switch Expressions (Preview)’ JEP 364: ZGC on macOS (Experimental) experimental macOS port of the ZGC garbage collector. JEP 365: ZGC on Windows (Experimental) experimental Windows port of the ZGC garbage collector. JEP 368: Text Blocks (Second Preview) second preview add text blocks to the java language. 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 format when desired. see comments on ‘JEP 355: Text Blocks (Preview)’ JEP 370: Foreign-Memory Access API (Incubator) incubator an API to allow Java programs to safely and efficiently access foreign memory outside of the Java heap. Applications include sharing memory across multiple processes, and serialization / deserialization of memory content by mapping files into memory (via, e.g., mmap). JDK internal JEP summary /remark JEP 345: NUMA-Aware Memory Allocation for G1 improves G1 performance on large machines by implementing NUMA-aware memory allocation. deprecated JEP summary /remark JEP 362: Deprecate the Solaris and SPARC Ports deprecate the Solaris/SPARC, Solaris/x64, and Linux/SPARC ports, with the intent to remove them in a future release. JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination deprecate the combination of the Parallel Scavenge and Serial Old garbage collection algorithms. It is not a goal to remove this GC combination. removed JEP summary /remark JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector remove the Concurrent Mark Sweep (CMS) garbage collector. JEP 367: Remove the Pack200 Tools and API remove the pack200 and unpack200 tools, and the Pack200 API in the java.util.jar package. These tools and API were deprecated for removal in Java SE 11 with the express intent to remove them in a future release. some feature details JEP 305: Pattern Matching for instanceof (Preview) You can now save the explicit cast after an instanceof test with code like this: ...

Java 15

created onJuly 16, 2022
general availability on 202-09-15 JEPs new features JEP state summary /remark JEP 339: Edwards-Curve Digital Signature Algorithm (EdDSA) standard EdDSA has a better performance than the existing ECDSA implementation (which uses native C code) at the same security strength. This new signature scheme does not replace ECDSA. JEP 360: Sealed Classes (Preview) preview allows the author of a class to specify which classes may extend the class. This allows for more fine grained control of inheritance hierarchies. JEP 371: Hidden Classes standard hidden classes 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 them indirectly, via reflection. JEP 375: Pattern Matching for instanceof (Second Preview) second preview instanceof now saves you from explicit, verbose casts. see comments on ‘JEP 305: Pattern Matching for instanceof (Preview)’ JEP 377: ZGC, A Scalable Low-Latency Garbage Collector production the Z Garbage Collector changes from an experimental feature into a product feature. see comments on ‘JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)’ JEP 378: Text Blocks standard see comments on ‘JEP 355: Text Blocks (Preview)’ JEP 379: Shenandoah production a GC which reduces GC pause times by doing evacuation work concurrently with the running Java threads. Pause times are independent of heap size, the goal is to never interrupt the running program for more than a handful of milliseconds. see comments on ‘JEP 189: Shenandoah, A Low-Pause-Time Garbage Collector (Experimental)’ JEP 383: Foreign-Memory Access API (Second Incubator) incubator an API to allow Java programs to safely and efficiently access foreign memory outside of the Java heap. Applications include sharing memory across multiple processes, and serialization / deserialization of memory content by mapping files into memory (via, e.g., mmap). JEP 384: Records (Second Preview) preview a new kind of restricted class for data containers without boiler code. see comments on ‘JEP 359: Records (Preview)’ JDK internal JEP summary /remark JEP 373: Reimplement the Legacy DatagramSocket API From JEP 373, Motivation: “The code base of the java.net.DatagramSocket and java.net.MulticastSocket APIs, and their underlying implementations, is old and brittle.” deprecated JEP summary /remark JEP 374: Deprecate and Disable Biased Locking disable biased locking by default, and deprecate all related command-line options. JEP 385: Deprecate RMI Activation for Removal deprecate the RMI Activation mechanism for future removal. RMI Activation is an obsolete part of RMI that has been optional since Java 8. No other part of RMI will be deprecated. removed JEP summary /remark JEP 372: Remove the Nashorn JavaScript Engine remove the Nashorn JavaScript script engine and APIs, and the jjs tool. The engine, the APIs, and the tool were deprecated for removal in Java 11. JEP 381: Remove the Solaris and SPARC Ports remove the source code and build support for the Solaris/SPARC, Solaris/x64, and Linux/SPARC ports. These ports were deprecated for removal in JDK 14. some feature details JEP 360: Sealed Classes (Preview) The motivation behind sealed classes is to provide a more fine grained control of which classes may be permitted to extend a class. Traditional approaches to control class inheritance include: ...

Java 16

created onJuly 20, 2022
general availability on 2021-03-16 JEPs new features JEP state summary /remark JEP 338: Vector API (Incubator) incubator provide an initial iteration of an incubator module, jdk.incubator.vector, to express vector computations that reliably compile at runtime to optimal vector hardware instructions on supported CPU architectures and thus achieve superior performance to equivalent scalar computations. JEP 380: Unix-Domain Socket Channels standard add Unix-domain (AF_UNIX) socket support to the socket channel and server-socket channel APIs in the java.nio.channels package. Extend the inherited channel mechanism to support Unix-domain socket channels and server socket channels. JEP 386: Alpine Linux Port standard port the JDK to Alpine Linux, and to other Linux distributions that use musl as their primary C library, on both the x64 and AArch64 architectures. JEP 388: Windows/AArch64 Port standard port the JDK to Windows/AArch64. The focus of this JEP is not the porting effort itself, which is mostly complete, but rather the integration of the port into the JDK main-line repository. JEP 389: Foreign Linker API incubator introduce an API that offers statically-typed, pure-Java access to native code. This API, together with the Foreign-Memory API (JEP 393), will considerably simplify the otherwise error-prone process of binding to a native library. JEP 390: Warnings for Value-Based Classes standard designate the primitive wrapper classes as value-based and deprecate their constructors for removal, prompting new deprecation warnings. Provide warnings about improper attempts to synchronize on instances of any value-based classes in the Java Platform. JEP 392: Packaging Tool standard Provide the jpackage tool, for packaging self-contained Java applications JEP 393: Foreign-Memory Access API third incubator an API to allow Java programs to safely and efficiently access foreign memory outside of the Java heap. Applications include sharing memory across multiple processes, and serialization / deserialization of memory content by mapping files into memory (via, e.g., mmap). JEP 394: Pattern Matching for instanceof standard instanceof now saves you from explicit, verbose casts. see comments on ‘JEP 305: Pattern Matching for instanceof (Preview)’ JEP 395: Records standard a new kind of restricted class for data containers without boiler code. see comments on ‘JEP 359: Records (Preview)’ JEP 396: Strongly Encapsulate JDK Internals by Default standard Code successfully compiled with earlier releases that directly accesses internal APIs of the JDK will no longer work by default. The strong encapsulation, which has been the default since JDK 9 can be relaxed with the JVM option –illegal-access. The sun.misc package will still be exported by the jdk.unsupported module, and will still be accessible via reflection. Hacking open private fields and protected or private methods of exported java.* APIs by reflection will result in an java.lang.reflect.InaccessibleObjectException. JEP 397: Sealed Classes second preview allows the author of a class to specify which classes may extend the class. This allows for more fine grained control of inheritance hierarchies. see comments on ‘JEP 360: Sealed Classes (Preview)’ JDK internal JEP summary /remark JEP 347: Enable C++14 Language Features formally allow C++ source code changes within the JDK to take advantage of C++14 language features, and to give specific guidance about which of those features may be used in HotSpot code. JEP 357: Migrate from Mercurial to Git migrate the OpenJDK Community’s source code repositories from Mercurial (hg) to Git. JEP 376: ZGC move ZGC thread-stack processing from safepoints to a concurrent phase. JEP 387: Elastic Metaspace return unused HotSpot class-metadata (i.e., metaspace) memory to the operating system more promptly, reduce metaspace footprint, and simplify the metaspace code in order to reduce maintenance costs. deprecated none ...

Java 17

created onOctober 4, 2022
general availability on 2021-09-14 JEPs new features JEP state summary /remark JEP 306: Restore Always-Strict Floating-Point Semantics standard make floating-point operations consistently strict, rather than have both strict floating-point semantics (strictfp) and subtly different default floating-point semantics. This will restore the original floating-point semantics to the language and VM, matching the semantics before the introduction of strict and default floating-point modes in Java SE 1.2. JEP 356: Enhanced Pseudo-Random Number Generators standard the new interface RandomGenerator supplies a uniform API for all existing and new PRNGs. RandomGenerators provide methods named ints, longs, doubles, nextBoolean, nextInt, nextLong, nextDouble, and nextFloat, with all their current parameter variations. JEP 403: Strongly Encapsulate JDK Internals standard Code successfully compiled with earlier releases that directly accesses internal APIs of the JDK will no longer work by default. The strong encapsulation, which has been the default since JDK 9 can be relaxed with the JVM option –illegal-access. The sun.misc package will still be exported by the jdk.unsupported module, and will still be accessible via reflection. Hacking open private fields and protected or private methods of exported java.* APIs by reflection will result in an java.lang.reflect.InaccessibleObjectException. see comment on JEP 396: Strongly Encapsulate JDK Internals by Default. JEP 406: Pattern Matching for switch preview introduces pattern matching for switch expressions and statements, along with extensions to the language of patterns. JEP 409: Sealed Classes standard allows the author of a class to specify which classes may extend the class. This allows for more fine grained control of inheritance hierarchies. See comments on JEP 360: Sealed Classes (Preview). JEP 412: Foreign Function & Memory API incubator eases the acces for devs to code and data on the same machine as the JVM but outside of the JVM, without the drawbacks of JNI. JEP 414: Vector API second incubator provides a second iteration of an incubator module, jdk.incubator.vector, to express vector computations that reliably compile at runtime to optimal vector hardware instructions on supported CPU architectures and thus achieve superior performance to equivalent scalar computations. JEP 415: Context-Specific Deserialization Filters standard allows applications to configure context-specific and dynamically-selected deserialization filters via a JVM-wide filter factory that is invoked to select a filter for each individual deserialization operation. This JEP addresses some drawbacks of the deserialization filters introduced in Java 9 with JEP 290: Filter Incoming Serialization Data . JDK internal JEP summary /remark JEP 382: New macOS Rendering Pipeline implement a Java 2D internal rendering pipeline for macOS using the Apple Metal API as alternative to the existing pipeline, which uses the deprecated Apple OpenGL API. JEP 391: macOS/AArch64 Port port the JDK to macOS/AArch64. Apple has announced a long-term plan to transition their line of Macintosh computers from x64 to AArch64. deprecated JEP summary /remark JEP 398: Deprecate the Applet API for Removal deprecate the Applet API for removal. The Applet API was previously deprecated, though not for removal, by JEP 289: Deprecate the Applet API in Java 9. JEP 411: Deprecate the Security Manager for Removal deprecates the Security Manager for removal in a future release. The Security Manager dates from Java 1.0. It has not been the primary means of securing client-side Java code for many years, and it has rarely been used to secure server-side code. removed JEP summary /remark JEP 407: Remove RMI Activation removes the Remote Method Invocation (RMI) Activation mechanism, while preserving the rest of RMI. The Jakarta Activation (JavaBeans Activation Framework / JAF in Java EE) is completely unrelated to the Java SE Remote Method Invocation (RMI) Activation and thus not affected by the removal. JEP 410: Remove the Experimental AOT and JIT Compiler remove the experimental Java-based ahead-of-time (AOT) and just-in-time (JIT) compiler. This compiler has seen little use since its introduction and the effort required to maintain it is significant. Devs who want to use the Graal compiler for either AOT or JIT compilation can use the Graal VM some feature details JEP 356: Enhanced Pseudo-Random Number Generators Four new specialized random generator interfaces that extend RandomGenerator are provided: ...

Java 18

created onOctober 6, 2022
general availability on 2022-03-22 JEPs new features JEP state summary /remark JEP 400: UTF-8 by Default standard specifies UTF-8 as the default charset of the standard Java APIs. APIs that depend upon the default charset will behave consistently across all implementations, operating systems, locales, and configurations. JEP 408: Simple Web Server standard provides a command-line tool to start a minimal web server that serves static files only (no CGI or servlet-like functionality) for prototyping, ad-hoc coding, and testing purposes, particularly in educational contexts. JEP 413: Code Snippets in Java API Documentation standard introduces an @snippet tag for JavaDoc’s Standard Doclet, to simplify the inclusion of example source code in API documentation. JEP 417: Vector API third incubator provide a third iteration of an incubator module, jdk.incubator.vector, to express vector computations that reliably compile at runtime to optimal vector hardware instructions on supported CPU architectures and thus achieve superior performance to equivalent scalar computations. JEP 418: Internet-Address Resolution SPI standard define a service-provider interface (SPI) for host name and address resolution, so that java.net.InetAddress can make use of resolvers other than the platform’s built-in resolver. JEP 419: Foreign Function & Memory API second incubator eases the acces for devs to code and data on the same machine as the JVM but outside of the JVM, without the drawbacks of JNI. JEP 420: Pattern Matching for switch second preview introduces pattern matching for switch expressions and statements, along with extensions to the language of patterns. See comments on JEP 406: Pattern Matching for switch (Preview). JDK internal JEP summary /remark JEP 416: Reimplement Core Reflection with Method Handles reimplement java.lang.reflect.Method, Constructor, and Field on top of java.lang.invoke method handles. Making method handles the underlying mechanism for reflection will reduce the maintenance and development cost of both the java.lang.reflect and java.lang.invoke APIs. deprecated JEP summary /remark JEP 421: Deprecate Finalization for Removal deprecate finalization for removal in a future release. Finalization remains enabled by default for now, but can be disabled to facilitate early testing. In a future release it will be disabled by default, and in a later release it will be removed. Note that finalization is distinct from both the finally block of the try-finally construct. No changes are proposed to try-finally. removed none ...

Java 19

created onOctober 6, 2022
general availability on 20 September 2022 JEPs new features JEP state summary /remark JEP 405: Record Patterns preview introduces record patterns to deconstruct record values. Record patterns and type patterns can be nested to for a declarative and composable form of data navigation and processing. JEP 422: Linux/RISC-V Port standard port the JDK to Linux/RISC-V. JEP 424: Foreign Function & Memory API preview eases the access for devs to code and data on the same machine as the JVM but outside of the JVM, without the drawbacks of JNI. JEP 425: Virtual Threads preview introduces lightweight threads called virtual threads to the Java platform. JEP 426: Vector API fourth incubator provides a second iteration of an incubator module, jdk.incubator.vector, to express vector computations that reliably compile at runtime to optimal vector hardware instructions on supported CPU architectures and thus achieve superior performance to equivalent scalar computations. JEP 427: Pattern Matching for switch third preview introduces pattern matching for switch expressions and statements, along with extensions to the language of patterns. See comments on JEP 406: Pattern Matching for switch (Preview). JEP 428: Structured Concurrency incubator simplifies multithreaded programming by introducing an API for structured concurrency. Structured concurrency treats multiple tasks running in different threads as a single unit of work, thereby streamlining error handling and cancellation, improving reliability, and enhancing observability. JDK internal none ...