Oracle brews Java 19. Mmmm, kinda tastes like RISC-V
Upstart CPU integration, incremental improvements – just the way cautious corporate customers like it
Oracle on Tuesday marked the release of Java 19 (JDK 19), the latest iteration of the popular general purpose programming language.
In its evangelizing slide deck accompanying this release, Oracle ranks Java as the "#1 language for today's technology trends" and the "#1 language in overall development organizational use." The company also cites consultancy VDC Research's findings that "Java is #1 choice for cloud."
When measured in more general terms, Java ranks #2 or #3 or #5, depending upon which programming language survey gets cited. But programming language popularity alone, however that gets measured, doesn't necessarily build an ecosystem.
Suffice it to say that Java continues to be extremely important to Oracle, to the estimated 10 million Java developers wandering the world, and to 60 billion active Java Virtual Machines (JVMs) that rely on a 27-year-old programming language.
Oracle JDK is based on the OpenJDK, the open source reference implementation of the Java SE Platform Edition platform. Oracle JDK is available under a subscription license while OpenJDK is offered under a GPL license.
JDK 19 arrives with seven JDK enhancement proposals six months after JDK 18. That's a cadence Oracle believes balances the needs of Java developers, customers, and maintainers.
Prior to 2017, the database biz and Java barista waited several years between Java releases, which ended up causing delays and ultimately became untenable amid the accelerated release cycles championed by Google, among others, during the transition from on-premises to cloud computing.
The inside track
In an interview with The Register, Georges Saab, Oracle SVP of development for the Java Platform and Chair of the OpenJDK Governing Board, said this is the tenth release done under the six-month release cycle.
"All of those releases came out at the designated time and date," said Saab. "There haven't been any delays since we moved to this model, which, as you're probably aware, was not always the case with the previous model that we had."
Saab said the result is being able to get innovation into the hands of developers more quickly than was possible during multi-year release cycles.
"In the past, they would often have to wait for quite a long time to get anything new in Java, and then they would get too much, all at once," he explained.
"We do realize that not everyone out there wants to be rebasing everything every six months," said Saab. "And so an important thing we did there was offering the Java SE subscription for long-term support, basically making it so that enterprises that want the convenience of staying on one version and just getting updates every quarter, to keep them secure, [can do that.]"
Java's accelerated release cycle doesn't necessarily mean that new features appear suddenly. They often surface as preview technologies, to prompt community feedback and adjustment in subsequent releases.
"We didn't find some magic way of doing three or four years of work in six months," explained Saab.
Thus, the Java development process has become iterative and participatory, even as it allows members of the community to sit out releases while features mature.
The improvements focused on by the Java community have been organized around specific themes.
"As an example," said Saab, "the Amber project is a project to work on improvements to the Java language and Java syntax, in order to make it more modern, more succinct, easier to use, and, above all, easier to read and understand. Leyden is about improving startup time and warmup time. Loom is about scalability and taking Java scalability to the next level."
In Java 19, these thematic projects are expressed in various Java Enhancement Proposals, or JEPs.
As part of Project Amber, JEP 405 offers a preview of Record Patterns, a way to deconstruct record values by binding each component to a variable. Another child of Project Amber, JEP 427, Pattern Matching for switch, enters its third preview.
From Project Loom, there's JEP 425, Virtual Threads, the preview of a lightweight threading implementation to complement the more robust Streams API.
"We've taken away the long-standing assumption that there's a one-to-one mapping between a Java thread and a native thread," explained Saab. "With virtual threads, you can have tens of thousands of Java threads to map to a native thread."
"While that's not something that most Java developers will [do every day], it does mean that the people who are writing high performance servers, or other things where they do want to be able to get down to that level, now have this new facility to basically scale their applications and their frameworks in a way that doesn't require them to change the programming model."
Another Loom initiative in the latest release is JEP 428, Structured Concurrency, an incubation-level effort to simplify multithreaded programming.
- Warning over Java libraries and deserialization security weaknesses
- Java SE 6 and 7 devs weigh their options as support ends
- Demand for software experts pushes tech salaries higher in UK
- Devops tool Jenkins now requires Java 11: This might sting a bit
Project Panama brings JEP 424, a preview API called Foreign Function and Memory that lets Java programs communicate outside of the JVM with native libraries and native data. The other Panama-based expansion is JEP 426, the fourth incubator version of the Vector API, which enables developers to create vector computations that compile efficiently using the most appropriate vector instructions on supported CPU architectures.
Lastly, there's JEP 422, a Linux/RISC-V Port that simplifies Linux/RISC-V implementations by integrating the port into the JDK main-line repository.
Saab said in addition to these JEPS, Java releases incorporate well over a thousand bug fixes that improve stability and performance. Java customers, he said, often delay upgrades because they look at the feature list and don't see anything they obviously need. But he urges Java developers to get with the program "because everything gets better."
Don't wait up
Upgrade reticence is common in the Java world, where enterprises have reason to be concerned about potential incompatibilities. According to monitoring biz New Relic, Java 11, released September 2018, is the most popular version of Java at the moment (48 percent), followed by Java 8, released March 2014 (46 percent). Both are long-term support (LTS) releases.
That fits the 2022 JRebel Java Developer Productivity Report's finding that the top reason to adopt a JDK upgrade is a new LTS release (25 percent), which exceeds justifications like security (23 percent), performance (20 percent), new features (18 percent), and compliance (14 percent).
But even LTS releases take a while to be adopted. The most recent LTS version, Java 17, from September 2021, only accounted for 0.37 percent of Java usage as of January 2022. Recent non-LTS releases (10, 12, 13, 14, 15, and 16) are similarly scarce in New Relic's stats.
So it may be a while before Java 19 becomes statistically significant. The next LTS release is expected to be Java 21 rather than Java 23. ®