The latest upgrade of standard Java, now available in a production release, incubates or previews a number of new capabilities including virtual threads and structured concurrency. Credit: Getty Images Java Development Kit (JDK) 20 is now available as a production release from Oracle. The latest upgrade of standard Java, JDK 20 features incubation or preview versions of seven new capabilities including virtual threads and structured concurrency. The seven features officially marked for the release, all of which are either in an incubation or in a preview stage, also include a vector API, scoped values, record patterns, pattern matching for switch statements and expressions, and a foreign function and memory API. A short-term release supported for six months, JDK 20 follows the September 20 release of JDK 19. JDK 21, due in September, will be a long-term support (LTS) release, backed by multiple years of support. Java 20 can be downloaded from oracle.com. These are the specifics on the seven new features in JDK 20: The vector API proposal, not officially added until just a few weeks ago, would introduce an API to express vector computations that reliably compile at runtime as optimal vector instructions on supported CPU architectures. This would achieve performance superior to equivalent scalar computations. The vector API previously has been incubated in JDK 16, JDK 17, JDK 18, and JDK 19. Virtual threads, in a second preview, are lightweight threads that reduce the effort of writing, maintaining, and observing high-throughput concurrent applications. This capability will fundamentally change how Java applications are scaled, according to Oracle. Minor changes since the first preview in JDK 19 include a small number of API changes (made permanent in JDK 19) and degradations to ThreadGroup (also made permanent in JDK 19). Structured concurrency features an API to simplify multithreaded programming and treats multiple tasks running in different threads as a single unit of work. Error-handling and cancellation are streamlined, improving reliability and enhancing observability. The only change since being incubated in JDK 19 is that StructuredTaskScope has been updated to support inheritance of scoped values by threads created in a task scope. This feature is being reincubated. Scoped values, an API in an incubator stage of development, enables the sharing of immutable data within and across threads. These are preferred to thread-local variables, particularly when using large numbers of virtual threads. A scoped value allows data to be shared safely and efficiently between components in a large program without resorting to method arguments. Goals include ease of use, comprehensibility, robustness, and performance. Record patterns, in a second preview, enhance the Java programming language with patterns to deconstruct record values. Record patterns and type patterns can be nested to enable a declarative, powerful, and composable form of data navigation and processing. Goals include extending pattern matching to express more sophisticated, composable data queries and not changing the syntax or semantics of type patterns. Main changes since the first preview in JDK 19 include adding support for inference of type arguments of generic record patterns, support for record patterns to appear in the header of an enhanced for statement, and removing support for named record patterns. Foreign function and memory API introduces an API by which Java programs can interoperate with code and data outside of the Java runtime. The API enables Java programs to call native libraries and process native data without the brittleness and danger of JNI (Java Native Interface). The API was previously incubated in JDK Versions 17 and 18 and previewed in JDK 19. Refinements added since JDK 19 include unification of MemorySegment and MemoryAddress abstractions, an enhanced MemoryLayout hierarchy, and splitting of MemorySession into Arena and SegmentScope to promote sharing of segments across maintenance boundaries. Pattern matching for switch statements and expressions enables the concise and safe expression of complex data-oriented queries. Previously previewed in JDK 17, JDK 18, and JDK 19, this fourth preview would enable a continued co-evolution with Record Patterns, allowing for continued refinements based on experience and feedback. The main changes in pattern matching for switch since the third preview include simplified grammar for switch labels and support for inference of type arguments for generic patterns and record patterns in switch statements and expressions. Also, an exhaustive switch over an enum class now throws MatchException rather than IncompatibleClassChangeError if no switch label applies at runtime. Oracle has seen a trend where user sites run an LTS version in production while also running the latest six-month release to try it out and give feedback. The features in JDK 20 are moving toward becoming standardized, Oracle said. These features are derived from Java research projects including Amber, for productivity-oriented capabilities (record patterns and pattern matching for switch); Panama, for interconnecting the JVM with native code (foreign function and memory API and vector API); and Loom, which incubates the new JVM features and the APIs built on top of them (scoped values, virtual threads, and structured concurrency). Capabilities that did not make it into JDK 20 but are still under consideration for Java include universal generics, string templates, sequenced collections, and an asynchronous stack trace VM API. Related content feature What is Rust? Safe, fast, and easy software development Unlike most programming languages, Rust doesn't make you choose between speed, safety, and ease of use. Find out how Rust delivers better code with fewer compromises, and a few downsides to consider before learning Rust. By Serdar Yegulalp Nov 20, 2024 11 mins Rust Programming Languages Software Development how-to Kotlin for Java developers: Classes and coroutines Kotlin was designed to bring more flexibility and flow to programming in the JVM. Here's an in-depth look at how Kotlin makes working with classes and objects easier and introduces coroutines to modernize concurrency. By Matthew Tyson Nov 20, 2024 9 mins Java Kotlin Programming Languages analysis Azure AI Foundry tools for changes in AI applications Microsoft’s launch of Azure AI Foundry at Ignite 2024 signals a welcome shift from chatbots to agents and to using AI for business process automation. By Simon Bisson Nov 20, 2024 7 mins Microsoft Azure Generative AI Development Tools news Microsoft unveils imaging APIs for Windows Copilot Runtime Generative AI-backed APIs will allow developers to build image super resolution, image segmentation, object erase, and OCR capabilities into Windows applications. By Paul Krill Nov 19, 2024 2 mins Generative AI APIs Development Libraries and Frameworks Resources Videos