Summary
Azul Zing is the optimized runtime within Azul Platform Prime, Azul’s high-performance Java platform. The stable release of Zing 25.08 is now available in two versions, stream builds and stable builds.
In this post you will learn that the new build includes:
- Security fixes
- General improvements
- Falcon compiler improvements
- Garbage collector logging
- Changes in command line options
Azul Zing Builds of OpenJDK (Azul Zing), the optimized Java runtime within Azul Platform Prime, reached the release of the 25.08 Stable Release line. Zing builds are available in two versions:
- Stream Builds: Fast-moving monthly releases (end of the month) that include the latest features and changes in Patch Set Update (PSU) releases. These are free for development and evaluation. Using Stream Builds in production requires an active subscription. Their version number is based on the year and month. For instance, “25.01.0.0” is the January Stream Build of 2025.
- Stable Builds: Builds that incorporate only Critical Patch Updates (CPUs), PSUs, and Azul Zing critical fixes and do not uptake new features and non-critical enhancements from Stream Builds. Stable Builds are our primary vehicle for delivering time-sensitive bug fixes to customers and are only available to Azul customers. Their version number is based on the Stream Build from which they originated. For instance, “23.08.500.0” was derived from the August Stream Build of 2023, but it already had multiple updates, as indicated by the 500 number.
As Stream Builds are released on a fixed schedule, all changes are documented in the release notes. Twice a year (in February and August), a Stream Build becomes the new Stable Build, providing a new version with many more improvements. This post provides an overview of all the combined improvements since 25.02 that are included in the 25.08 Stable Line.
Security fixes
This version includes the April and July 2025 CPU and PSU release security fixes.
General improvements
- Heuristics for committing and uncommitting Java heap (when Xms != Xmx) have been tuned to target 25-30% lower GC CPU usage.
- BASE64 intrinsics on AVX2-capable hardware are enabled by default.
- The size of the installer and the installation on disc were reduced by removing files from the directory
product/etc/connected-compiler/bin (lib)
. - Optimizations are implemented for JNI handle lookups, allowing weak and global JNI handle lookups to be done much quicker.
- The unified compiler feature is now turned on by default, allowing for unified local and remote compilation. You can disable this feature and fall back to the local Falcon compiler using the command line option
-XX:-UseUnifiedCompilerFrontend
.
Falcon Compiler
- Falcon compiler optimization improvements and higher code speed for vectorization, escape analysis, and loop unrolling.
- Introduction of the new Falcon flag
-XX:FalconGenerateDiscriminators
. This flag improves the quality of debug (DWARF) metadata for Falcon-generated assembly, which is beneficial for some diagnostic tooling. This option is disabled by default.
Garbage Collector Logging
- Implementation of unified logging for JIT compilation and JIT inlining. Unified GC logging supports the Falcon compiler, C1 compiler, and the legacy Dolphin compiler. You can enable unified GC logging for JIT compilation using
-Xlog:jit+compilation=debug
. For more information about Unified GC Logging, see our documentation on Unified GC Logging. - Periodic logging is disabled by default in the steady phase. This is done by setting the default value of
-XX:SteadyPeriodForStatsSeconds
to 0, to reduce the size of GC logs. - New command line options to provide more information in GC logs:
-XX:GCLogPrintWeakRefStats
: Enables logging of Reference.get() counters in standard GC log line format. This records to the GC log any time a Reference.get() call is made, as well as how many total refs were strengthened. The default value istrue
.-XX:PrintPSI
: Adds Pressure Stall Information (PSI) to the GC log along with other system metrics. The default value istrue
.
- New command line options to manage statistics that are output to the GC log periodically, including system info, compiler stats, and ReadyNow stats logging. These new flags allow you to define two logging periods, Warmup and Steady, and how often stats are written to the log during these periods:
-XX:WarmupPeriodForStatsSeconds
: Defines the duration of the Warmup phase, in seconds. The default is 300 seconds (5 minutes).-XX:SteadyPeriodForStatsSeconds
: Defines the duration of the Steady phase, in seconds. The default is 0, which means logging continues indefinitely unless explicitly changed. If you explicitly set this option to 0, the Steady phase is skipped.-XX:PeriodicStatsDuringWarmupIntervalSeconds
: Controls how frequently logs are printed during the Warmup phase, in seconds. The default is every 5 seconds.-XX:PeriodicStatsIntervalSeconds
: Controls how frequently logs are printed during the Steady phase, in seconds. The default is every 60 seconds (once per minute).
- Implementation of an additional parameter to the
Xlog
command line option for unified logging:savecount
. You can use this parameter to preserve the starting logs during log rotation, for example:-Xlog:gc:gc.log::filecount=5,filesize=20M,savecount=1
Note that this parameter only works with unified logging. If you have unified logging disabled, you can still achieve the same result using the command line option-XX:StartupGCLogSaveCount=<number of save counts>
. - CPU used by the GC early during execution has been reduced by committing the Java heap faster in cases where Xms is not equal to Xmx.
Changes in Command Line Options
Next to the already mentioned new Command Line Options for the Garbage Collector and Falcon, there are more changes:
- Removed command line option:
-XX:ValidateLicenseKey
- Modified:
- You can now print the assembly of all sampled methods at exit with
-XX:PrintHotMethodsAssemblyProfileAtExit
, use any negative integer instead of the former special keywordall
.
- You can now print the assembly of all sampled methods at exit with
- New:
-XX:AvoidInterruptsDuringHeapFunding
allows you to switch Java heap funding to use system calls that do not get interrupted by signals. This option is disabled by default.- Two new command-line options that modify the behavior of code cache flushing:
-XX:+EnableC1FlushingUnderEmergency
: Enables C1 code cache flushing after the emergency threshold has been reached. This option istrue
by default.-XX:+EnableTier2FlushingUnderEmergency
: Enables Tier 2 code cache flushing after the emergency threshold has been reached. This option istrue
by default.
- These two new options apply to both
-XX:+UseEmergencyCodeCacheFlushing
, which is the default, and-XX:+UseIncrementalCodeCacheFlushing
, which is non-default.
When-XX:+UseIncrementalCodeCacheFlushing
is enabled, the older flagsEnableC1Flushing
andEnableTier2Flushing
control which code blobs are flushed as long as the code cache is below the “high” threshold. The new flags control code caching behaviour after the “high” threshold is crossed. -XX:PeriodicCCFTriggerIntervalSec
: When using incremental code cache flushing,-XX:+UseIncrementalCodeCacheFlushing
, this parameter sets the maximum interval, in seconds, before the old garbage collector is asked to re-enable flushing of code blobs. This option is set to3600
by default.-XX:+UnifiedCompilerFrontendReplay
: Allows us to collect more information about a crashing compile to improve reproducibility outside of the VM. This option istrue
by default.-XX:ProfilePersistCodeProfilesPeriodSec
: Enables periodic dumping of runtime bytecode profiling counters to the ReadyNow profile log at the interval specified, in seconds. If you set the option to 0, a dump occurs only on a graceful JVM shutdown. The default value is -1, which disables the feature.- Backport of the OpenJDK command line option
-XX:+ PrintExtendedThreadInfo
. This option prints additional information in thread dumps. This option is disabled by default.
- The default values for the following command line options have changed:
-XX:AvoidInterruptsDuringHeapFunding
has changed from false totrue
by default. This change also helps avoid intermittent failures during funding with libonload. For more information about this option, see Command Line Options, Zing Command-Line Options.- –
XX:DefensiveHeapShrinkingXmxSacrificePercent
has changed from 5% to 10% by default. For more information about this option, see Command Line Options, Defensive Heap Shrinking -XX:+AccountInactiveFileCacheAsAvailableMemory
has changed fromfalse
totrue
by default. This option tells the VM to include inactive file cache when computing available memory for new allocations, used with elastic heaps and defensive heap shrinking.-XX:RNOConnectionTimeoutMillis
has changed from 5000 milliseconds to 10000 milliseconds. For more information about this option, see Command Line Options, ReadyNow Orchestrator JVM Options
Conclusion
This new 25.08 Stable Line of Azul Zing Builds of OpenJDK includes general improvements, a method to preserve start logs from the Garbage Collector, and numerous changes to the command-line options. Above all, security fixes from the April and July CPU/PSU releases are included to ensure your system runs with all available security fixes.