January 27, 2023


For computer aficionados

JDK 19: The new features in Java 19

Java Progress Package 19, owing this September, is now feature-finish, getting just attained an original rampdown period. Seven characteristics concentrate on the launch which include structured concurrency, file styles, a preview of a international purpose and memory API, and support for the open up resource Linux/RISC-V instruction set architecture (ISA).

With this most current milestone in the release approach for common Java, other prepared abilities this kind of as common generics and worth objects will have to wait for a later version of the platform. JDK 19 follows the March 22 arrival of JDK 18. Normal Java is on a six-thirty day period launch cadence.

JDK 19 is slated to be formally introduced for manufacturing use on September 20, preceded by a second rampdown stage beginning July 21, and launch candidates to be revealed August 11 and August 25. Early accessibility builds of JDK 19 can be accessed from jdk.java.internet/19. The JDK 19 options contain:

  • Structured concurrency, in an incubator section, is supposed to simplify multithreaded programming through a structured concurrency library. This concurrency treats various tasks running in unique threads as a single unit of work, to streamline mistake dealing with and cancellation. Dependability and observability are improved.
  • A preview of file patterns, to deconstruct report values. History styles and style styles can be nested to empower a declarative, strong, and composable type of info navigation and processing. Targets of the proposal consist of extending sample matching to convey a lot more complex, composable knowledge queries even though not shifting the syntax or semantics of kind patterns. This proposal builds on pattern matching for instanceof, delivered in JDK 16  in March 2021. Upcoming plans could phone for file designs to be prolonged with capabilities this kind of as array designs and vararg patterns. Report designs is section of Venture Amber, an work to discover and incubate lesser, efficiency-oriented Java options.
  • A preview of a overseas operate and memory API, which would introduce an API by which Java systems can interoperate with code and details outside the Java runtime. By successfully invoking international functions (i.e., code outside the Java runtime) and safely accessing overseas memory (i.e., memory not managed by the JVM) the API enables Java courses to call indigenous libraries and method native facts with no the hazard and brittleness of the Java Native Interface (JNI). The international function and memory API combines two previously incubating APIs: the foreign memory accessibility API and the international linker API. The overseas functionality and memory API was formerly incubated in JDK 17 and reincubated in JDK 18. The proposal’s ambitions include simplicity of use, effectiveness, generality, and basic safety.
  • A preview of digital threads, which are light-weight threads that dramatically lessen the effort of crafting, maintaining, and observing superior-throughput, concurrent purposes. Aims incorporate enabling server applications written in the easy thread-for each-ask for model to scale with around-exceptional hardware utilization, enabling present code that employs the java.lang Thread API to adopt digital threads with small transform, and enable troubleshooting, debugging, and profiling of virtual threads with current JDK tools. It is not a purpose of this proposal to transform the primary concurrency product in Java or offer you a new data parallelism build in both the Java language or Java libraries. Nor is it a goal to remove the standard implementation of threads or to silently migrate existing applications to use digital threads.
  • A 3rd preview of sample matching for switch expressions and statements, extending sample matching to switch, to allow an expression to be examined towards a quantity of styles, each with a unique action, so elaborate data-oriented queries can be expressed concisely and properly. This ability earlier was previewed in JDK 17 and JDK 18. The third preview would add refinements which includes the substitution of guarded patterns with when clauses in switch blocks. Also, the runtime semantics of a pattern change when the price of the selector expression is null are much more closely aligned with legacy switch semantics. The plan’s objectives contain expanding the expressiveness and applicability of switch expressions and statements by permitting designs to look in case labels. Other ambitions contain allowing for builders to relax the historic null-hostility of switch when preferred, increasing the protection of change statements and making certain that present change expressions and statements carry on to compile with no adjustments and execute with equivalent semantics.
  • A fourth incubation of a vector API that would express vector computations that reliably compile at runtime to optimal vector guidelines on supported CPU architectures, hence accomplishing performance remarkable to equal scalar computations. Builders working with the API gain a way to compose sophisticated vector algorithms in Java, using the HotSpot auto-vectorizer but with a user product that helps make vectorizations additional predictable and sturdy. The vector API beforehand was incubated into JDK 16, JDK 17, and JDK 19.
    Enhancements to the API proposed for JDK 19 contain enhancements to load and store vectors to and from MemorySegments, as defined by the Overseas Perform and Memory API preview. JDK 19 would also increase two cross-lane vector operations, compress and develop, with each other with a complementary vector mask compress operation. The compress vector procedure maps lanes of a resource vector, selected by a mask, to a place vector in lane get, whilst the grow operation does the inverse. The compress procedure is valuable in filtering query benefits.
    In one more addition to the vector API, bitwise integral lanewise operations would be expanded, which include operations these types of counting the range of just one bits, reversing the get of bits, and compressing and increasing bits. Targets of the API involved becoming apparent and concise, system-agnostic, getting trustworthy runtime and compilation efficiency on x64 and AArch64 architectures, and enabling “sleek” degradation, for scenarios in which a vector computation can not be absolutely expressed at runtime as a sequence of vector functions.
  • With the Linux/RISC-V port, Java would obtain help for a hardware instruction set that is presently supported by a huge array of language toolchains. RISC-V truly is a household of associated ISAs. The Linux/RISC-V port would only guidance the RV64GV configuration of RISC-V, a common objective 64-little bit ISA that features vector recommendations. The builders of Java may well contemplate other RISC-V configurations in the long term.

The port would assistance the pursuing HotSpot VM possibilities: the template interpreter, C1 (shopper) JIT compiler, C2 (server) JIT compiler, and all present-day mainline rubbish collectors like ZGC and Shenandoah. The true porting is practically complete the emphasis of the JDK Improvement Proposal (JEP) is integration of the port into the JDK mainline repository.

Like JDK 18, JDK 19 is due to be a shorter-phrase release, with only six months of best-amount, Premier help.

The previous release, JDK 17, was a Lengthy Phrase Guidance (LTS) release, with a number of yrs of guidance. It arrived September 14, 2021.

Copyright © 2022 IDG Communications, Inc.