Skip to content
TrackPodcasts
technologySep 10, 202615:37

"Declassifying the Java 27 Release!" [IJN]

Inside Java

About this episode

Java 27 is heading for release on September 15th. As with every release of the JDK there are a host of changes that will impact developers, from new features, to changes in behavior of existing features. In this episode of the Inside Java Newscast we will be "declassifying" all the developer impacting changes in Java 27. 

Get every episode summarized

Each time Inside Java publishes, we email you a written briefing from the transcript — the topics, who appeared, and any specific claims, with the ad reads skipped.

Email me new episodes

Free for 3 shows. No card needed.

Hosts & guests

Transcript ready

135 searchable segments. Every word is indexed and playable.

"Declassifying the Java 27 Release!" [IJN]

Inside Java

0:00
15:37

Full transcript

Inside Java"Declassifying the Java 27 Release!" [IJN]. Machine-transcribed; use the interactive transcript above to jump the player to any line.

Hello and welcome back to the Inside Java podcast. The podcast about everything Java brought to you by the team at Oracle that builds Java. My name is Billy Carando and this is the podcast version of Inside Java Newscast 115, the classifying the Java 27 release. Enjoy the episode. Hey, Java developers, welcome to the Inside Java Newscast. My name is Billy Carando. Java 27 is nearly here with its set to be released on September 15. In this episode of the Inside Java Newscast, we will be declassifying Java 27 or at least the parts most likely to affect developers. If you want to learn more about the runtime changes or security updates that are part of the JDK 27 release, I will be covering those as well by in written format on Inside Java.

The Oracle covering runtime changes should be available this Saturday, the 12th and the security Oracle on Wednesday the 16th. If you are watching this video after those dates, the description should be updated with links to both. Also, don't forget to join us for the Java 27 release live stream on September 15, starting at 1500 UTC. Should be a great time, I along with the rest of the Java DevVol team will be demonstrating new features available in Java 27, interviewing guests and more so don't miss out. With that said, let's get started. There are 9 JPS JDK and Hassem Reposels that are part of this release. For the JPS, our final changes to the JDK. G1GC has been the de facto Garbpsi Collector since JDK 9. However, when only a single CPU are less than 1790 megabytes of physical memory

or present, the Cero GC was default instead. Because of continued improvement to G1 over subsequent releases, even in cases of limited system resources, G1 is still often the best option. As a result, with JPS 523, G1 will be the default GC used in all cases, meaning you must now explicitly request to use an alternative GC. While large scale quantum computing capable of breaking algorithms doesn't exist yet, we are getting closer to that point, so we need to start repairing for that world now. JPS 527 adds Post-Quantum Hybrid Key Exchange algorithms to TLS 1.3 that are quantum computing resistance. Hybrid keys are a combination of traditional and quantum resistant keys, and as so as long as one key remains unbroken, then the remessage remains encrypted. For more information on this, check out this video from my colleague, Annamaria.

Compact object headers were introduced as a final feature in JDK 25, and will now be enabled by default in JDK 27 with JPS 534, meaning you no longer need to pass plus use compact object headers to enable them. Intesting compact object headers reduced heap usage by about 20% and CPU usage by nearly 10%, and also reduced GC Pressure, though of course your results will vary. If you would like to disable compact object headers, it can be done with minus use compact object headers. With JPS 536, JDK Flight Recorder will now by default redact sensitive information like passwords, API keys, and more when passed in as JVM arguments are as environmental variables. This behavior can be extended by adding your own filters via the redact arguments for filtering JVM arguments and redact key for environmental and system properties.

Both options are part of the Flight Recorder Options JVM arguments. The filters use a case-insensitive glob patterns where star and question mark are wild cards, and multiple filters can be specified by using a semicolon as a delimiter. For example, if the URL to your database was passed in as an environmental value DB URL, you could redact that value with Flight Recorder Options Redact Key equals DB URL. If you find you need to redact a lot of values, consider defining them in a file, referencing the file with the at sign, like in this example, Flight Recorder Options Redact Arguments at args.txt. By default, a lot of common sensitive values are being redacted. You can see a list of that here. If you specify your own filters to include the default filters, prefix the first filter with a plus, like in this example, you can disable the default filters by

passing none to redact arguments and redact keys. The other five JVM all cover preview and incubator features. Lazy Constance inserts third preview with JVM 3.1 with two changes. The methods is initialized and are else or removed as these could be used in a way that's not consistent with the goals of lazy constants. A new factory method set of lazy has been added that can create a stable set of predefined element candidates. Primitive tie patterns enters fifth preview with JVM 5.2 without any changes. So hopefully if no issues are found, we will see this feature become finalized in an upcoming release. Structure Concurrency is again a preview feature with JVM 5.3 with a few changes. The Structure Taskope and Joiner Interfaces now have a third type parameter

R underscore X for the type of exception that the Join method of Structure Taskope can throw. A new static open method in Structure Taskope implements the default Join policy. The Joiner Factory methods all successful or throw, any successful or throw, and await all successful or throw now create joiners that cause join to throw a execution exception when the outcome is an exception. New overloads for these methods allow a function to be specified to produce a custom exception. The Joiner Factory method await all has been removed. And the on timeout method of the Joiner Interface has been replaced by the timeout method, which either produces the result R throws an exception when the scope is canceled by timeout.

If timeout throws an exception, then the type will be canceled by timeout exception. Structure Concurrency is scheduled to become a final feature in JDK 28, which I am really looking forward to. JVM 5.3.8 repreviews PAM encoding for a third time in JDK 27 with quite a few changes that would take a while to cover here. Check the JVM 4 details if interested. Finally, the Vector API will be entering incubator status for what should be the 12th and final time, as key VEH features are being merged into mainline for JDK 28, allowing to vector API to mature into preview status. Alright, that's all the JVM 4.7 changes. Let's take a look at the changes that are below the jump level, but you should still know about. There is one noteworthy new feature in JV27.

The FFM API now supports initializing the thread local execution state before down calls. This complements the preexisting call state capturing mechanism, which can already be used to read thread local execution state after down calls. As this involves interacting with native libraries, the structure and contents of the execution state are platform dependent, C-linker-obsyn-capsure-call state in the Java doc for further information and a usage example. There are a few features that were removed in JV27. Finalize has been removed from Java Util concurrent thread pool executor, which has been deprecated since JDK 9 and a no-op since JDK 11. This means that any calls will now reference object finalize which declares throwable, which could lead to a code compilation issue. Developers are encouraged to avoid using finalization,

but if an immediate fix is needed, this can be done with a try catch. Support for the Java local use old ISO code system property in the Java Util local class has been removed and will function as a no-op. Use old ISO codes was originally introduced in JDK 17 to refer to legacy ISO code changes, but was deprecated in JDK 25. The gindy LDAP service provider belonging to the Java naming module in the JDK will no longer have any values set by default for the Java naming factory control, object and state properties. Applications that have been aligned on these three gindy properties being set by the LDAP service provider are expected to set these values themselves by following the documentation of Java x naming context. Obsolute localized resource files are now removed from the JDK

source repository. The JDK includes localized resource files for a number of components for English, Japanese, German and simplified Chinese, but other localization resources have fallen out to sync with their English counterparts. These files have been removed with the exception of Java desktop module where those files will remain. There is one notable result issue. The default time zone returned by time zone get default on Windows now reflects the latest IAMATZ database IDs. Previously, this might have returned incorrect data. There are a few other changes worth mentioning. The behavior of the JDK built-in HTTP server implementation when matching an incoming request path to a HTTP context path is switched from string prefix matching to path prefix matching.

This means the request path must begin with the context path and all matching path segments must be identical. For instance, the context path slash flew, flew would previously match on slash flew slash bar as well as slash foobar. However, with this update will no longer match on slash foobar. Predefined ISO 8601 based time formatters in the date time formata class that accept zone offsets now support sort zone offsets for parsing. In previous releases parsing offsets without seconds are nanoseconds resulted in a date time parse exception. With some ISO 4 matters, these offsets are now parsed successfully by all predefined ISO 4 matters that accept zone offsets. Service loader is changed so that iteration over service providers now consistently throw service configuration error when linkage errors are encountered. Previously, linkage error was incorrectly being thrown.

The behavior of Java Util zip gzip input stream has been reverted to its pre-JDK 23 This is because of a whole complex issue of how gzip input stream interacts with the underlying implementations of input stream available which colors have no control over. You can see all the explanation flying by onscreen right now. Of course, check the JBS issue if you are interested. A better fix for this issue will take more time to figure out thus the regression and behavior. Zip output stream put next entry now throws zip exception when a zip entry name or comment string contains unmakable characters and cannot be encoded using the chart set of the zip output string. Previously, put next entry would have thrown an illegal argument exception. Empty subsets of tree map and tree set now throw null pointer exception when passing a null

action to stream for each split iterator for each remaining or try advance. And prior releases false would have been returned or completed normally when passed a null action if the subset was instead of throwing null pointer exception as required by the specification. Support for CLDR has been updated to 48.2 which will bring a number of updates to locale data and translations. Check the Unicorn Consodiums CLDR release notes for details. The thread delivery and events to Java X naming events naming listeners enrolled with a Java X naming LDAP context will now have its thread context class loader set to the system class loader. All right, that's all the noteworthy changes in the JDK 207 release that will primarily

impact developers. Check the description for links to my articles on runtime and security updates to JDK 27 and also a link to our JDK 27 livestream when they all become available. If you like this episode leave a like and subscribe and share it with a friend. If you didn't like this episode share it with an enemy. No reason they shouldn't suffer as well. And so next time happy coding!

More episodes

More from Inside Java

View all episodes →