For more than two decades, the pace of development of new releases of the Java programming language was relatively slow, with major updates only coming every few years. That all changed in 2018 when Oracle introduced a new release strategy that now sees multiple Java releases every year, including one earlier this week.
On Sept. 16 at its CodeOne conference, which is co-located with OpenWorld, Oracle announced the general availability of Java SE 13 (JDK 13), providing new features for developers that can improve productivity and efficiency. During a CodeOne keynote, Brian Goetz, Java language architect at Oracle, outlined the progress made in Java in recent years and highlighted the new capabilities being introduced with Java 13.
"A lot of people were pretty skeptical at first about the rapid release cadence as it seemed inconceivable that we could turn a ship as big as Java that quickly," Goetz said. "There were even fears that Java 10 and Java 11 might have no features at all and, looking backwards, it's really hard to overstate what a significant change the rapid release cadence has been."
Having multiple releases a year means features can be delivered more often to developers, Goetz said. Perhaps more importantly though is how features are now designed – in smaller pieces to take advantage of the release cycle. A disadvantage of the new cycle is that it's not always clear to developers and end users why and when they need to upgrade.
"In the old world, when we had big releases every few years and those big releases tended to have big features, there was plenty of motivation to upgrade," Goetz said. "Now the reality is, we're not going to be seeing a lot of those big features in the future, and that's not because we're not innovating, it's because those big features are going to get broken up into smaller features and delivered in phases."
The new Java 13 update is a good example of a release that doesn't have large new features, but rather provides incremental improvements for developers as features mature.
Among the new features in Java 13 is a capability known as Dynamic CDS (class data sharing). According to the Java Enhancement Proposal 350 (JEP 350), key goals of the feature are to improve the usability of application class-data sharing (AppCDS) as well as eliminate the need for users to do trial runs to create a class list for each application.
JEP 351 defines a new capability in Java 13 that enables a program to uncommit unused memory. The feature improves memory management by returning unused heap memory to the operating system.
One of the preview features in Java 13 outlined by Goetz during his keynote is JEP 355, which is a style optimization capability known as text blocks.
"It's not a particularly sophisticated feature," he said about text blocks. "But it is something that makes a big difference in everyday code."
Without text blocks, if a developer wants to pull HTML web code into Java, there are some extra steps and code strings that need to be used that are both messy and error-prone, according to Goetz. The JEP details for text blocks note that their goal is to enhance the readability of strings in Java programs that denote code written in non-Java languages.
Java 14 and Beyond
While each individual Java release has new features, Oracle has grouped a number of major development efforts under different code names that will lead to feature development in Java 14 and beyond.
One of the large umbrella efforts is Project Amber, which is all about productivity-oriented features. Project Valhalla is moving forward with capabilities to improve the Java Virtual Machine. And Project Loom is all about supporting new programming models on top of Java.
"This is a great time for Java," Goetz said. "We're delivering faster, there's useful features in every version, and the pipeline for the future is better than it's ever been."