Oracle announced the availability of Java 23, the latest version of the world’s number one programming language and development platform.
Java 23 (Oracle JDK 23) delivers thousands of improvements to help developers increase productivity and drive innovation, while enhancements to the platform’s performance, stability, and security help organizations accelerate business growth.
“Java continues to evolve to support organizations’ increasingly diverse modern application development needs,” said Arnal Dayaratna, research vice president, software development, IDC. “The new release enables developers to expand their toolset and increase their productivity, helping them build and deliver applications that leverage the power of groundbreaking technologies such as AI. By delivering innovative new capabilities every six months, Java continues to help development teams add significant value to their organizations.”
In addition to the new enhancements and features for developers, Java 23 provides significant value to their organizations. For example, Java 23 is supported by the recent GA of Java Management Service (JMS) 9.0, an Oracle Cloud Infrastructure (OCI) native service that provides a unified console and dashboard to help organizations manage Java runtimes and applications on-premises or in any cloud. In addition, JMS 9.0 provides many usability improvements, and Oracle JDK 23 provides more options to fine-tune and improve peak performance with the addition of the Graal compiler, a dynamic just-in-time (JIT) compiler written in Java that transforms bytecode into optimized machine code.
“The new features in Java 23 help developers across all levels of expertise increase their productivity and streamline the development of high-performing, secure, and scalable applications,” said Georges Saab, senior vice president, Oracle Java Platform and chair, OpenJDK governing board. “With a wide range of new features and tools designed to help developers build and deliver applications faster and more efficiently, Java 23 helps development teams and their organizations boost innovation and drive increased business growth.”
Java 23 delivers improvements and enhancements to the Java language, runtime, libraries, and the tools included in the Java Development Kit (JDK). Significant updates delivered in Java 23 are:
Language Features via Project Amber
- JEP 455: Primitive Types in Patterns, instanceof, and switch (Preview): Help increase Java programming productivity by making the language more uniform and more expressive. By helping to remove restrictions pertaining to primitive types that developers encounter when using pattern matching, instanceof, and switch, it enhances pattern matching by allowing primitive type patterns in all pattern contexts, and also extends instanceof and switch to work with all primitive types.
- JEP 476: Module Import Declarations (Preview): Helps developers improve productivity by enabling them to quickly and easily import all the packages exported by a module, without requiring the importing code to be in a module itself. This simplifies the reuse of modular libraries for all developers and helps beginners more easily use third-party libraries and fundamental Java classes without needing to learn where they are located in a package hierarchy.
- JEP 477: Implicitly Declared Classes and Instance Main Methods (Third Preview): Help accelerate learning and skills development by offering a smooth on-ramp to Java programming to enable students to write their first programs without needing to understand language features designed for large programs. As a result, educators and instructors can introduce concepts gradually, and students can write streamlined declarations for single-class programs and seamlessly expand their programs with more advanced features as their skills grow. In addition, experienced Java developers can write small programs succinctly without needing to use tools designed for larger projects.
- JEP 482: Flexible Constructor Bodies (Second Preview): Help developers increase productivity by allowing statements to appear before an explicit constructor invocation—such as super(..) or this(..). The statements cannot reference the instance under construction, but can initialize its fields before invoking another constructor, which makes a class more reliable when methods are overridden. This gives developers greater freedom to express the behavior of constructors and preserves the existing guarantee that constructors run in top-down order during class instantiation.
Libraries
- JEP 466: Class-File API (Second Preview): Helps developers improve productivity by providing a standard API for parsing, generating, and transforming Java class files.
- JEP 469: Vector API (Eighth Incubator): Helps developers improve productivity by introducing an API to express vector computations that reliably compile at runtime to vector instructions on supported CPU architectures. As a result, developers can achieve performance superior to equivalent scalar computations.
- JEP 473: Stream Gatherers (Second Preview): Helps developers improve productivity by enhancing the Stream API to support custom intermediate operations, which allow stream pipelines to transform data in ways that are not easily achievable with existing built-in intermediate operations. By making stream pipelines more flexible and expressive and allowing custom intermediate operations to manipulate streams of infinite size, this feature enables developers to become more efficient in reading, writing, and maintaining Java code.
- JEP 480: Structured Concurrency (Third Preview): Helps developers improve the maintainability, reliability, and observability of multithreaded code by simplifying concurrent programming via a new API for structured concurrency. By consolidating groups of related tasks running in different threads into a single unit of work, structured concurrency can help eliminate common risks arising from cancellation and shutdown, such as thread leaks and cancellation delays.
- JEP 481: Scoped Values (Third Preview): Helps developers increase the ease-of-use, comprehensibility, performance, and robustness of their projects by enabling the sharing of immutable data within and across threads.
Performance and Runtime Updates
- JEP 474: ZGC: Generational Mode by Default: Helps developers increase efficiency by switching the default mode of the Z Garbage Collector (ZGC) to the generational mode, which reduces the resources and maintenance costs required to support two different modes.
Tools
- JEP 467: Markdown Documentation Comments: Helps developers increase efficiency and productivity by enabling Javadoc documentation comments to be written in Markdown rather than solely in HTML and Javadoc @-tags. By gaining the ability to use Markdown syntax in documentation comments alongside HTML elements and JavaDoc tags, developers can more easily write and read API documentation comments in source form without adversely impacting the interpretation of existing documentation comments.
Stewardship
- JEP 471: Deprecate the Memory-Access Methods in sun.misc.unsafe for Removal: Provides developers with a streamlined toolset by helping them understand when their applications rely, directly or indirectly, on the memory-access methods in sun.misc.Unsafe, which is planned for removal in a future release.
The features in the Java 23 release are a result of continuous close collaboration between Oracle and other members of the worldwide Java developer community via OpenJDK and the Java Community Process (JCP). For more details on the features in Java 23, please read the Java 23 technical blog post.
Supporting the Global Java Community with Innovation in the Cloud
Java delivers increased performance, efficiency, cost savings, and innovation when deployed on OCI, which is one of the first hyperscale clouds to support Java 23. By delivering Oracle Java SE, Oracle GraalVM, and the Java SE Subscription Enterprise Performance Pack at no additional charge on OCI, Java 23 helps developers build and deploy applications that run faster, better, and with optimized cost-performance.
The Oracle Java Universal SE Subscription is an offering that provides customers with best-in-class support. It includes triage support for the entire Java portfolio, entitlement to Oracle GraalVM, the Java SE Subscription Enterprise Performance Pack, access to the advanced features of JMS, and the flexibility to upgrade at the pace of customers’ businesses. This helps IT organizations manage complexity, mitigate security risks, and contain costs.
In addition, Oracle recently announced at Oracle CloudWorld that Oracle Code Assist will be initially optimized for Java. Oracle Code Assist is an AI code companion that makes it easier to build Java applications, and the Oracle Code Assist service running on OCI will also be available for C, C++, Go, JavaScript, PL/SQL, Python, Ruby, and Rust.