Using the Falcon Compiler
The Falcon compiler is the default optimizing JIT (Just-In-Time) compiler in the Azul Zing Builds of OpenJDK (Zing).
Falcon Optimization Notes
The main focus of the Falcon compiler is generating high performance code. This may result in longer compile times because additional CPU time is required for higher levels of optimization. Longer Falcon compile times can increase the application startup and warm-up times when compared to the startup and warm-up times when running Zing using the C2 compiler.
Falcon fully supports Azul ReadyNow technology, which helps improve consistency of application performance during warmup.
While future versions of Zing will likely include automatic ongoing eviction of contents in the Falcon cache, the current Zing version does not, and as of version 18.01.0.0, the Falcon cache is not automatically cleared or evicted. The cache will accumulate contents up to FalconMaxCacheSize
. Once it reaches that size, newly encountered compilations will no longer be added to the cache. The cache can be reset at any time (including while Zing is running) by destroying the contents of the cache with, for example, rm -r .zing-falcon-cache.
History and Alternatives
The Falcon compiler first became available as a feature in Azul Platform Prime 16.12.0.0. Falcon became the default Tier 2 optimizing compiler in Azul Platform Prime 17.03.0.0. If, for some reason, you need to switch to the non-default Tier 2 C2 compiler in Azul Platform Prime 17.03.0.0 - 20.03.1.0, use the -XX:+UseC2
option. For example,
$JAVA_HOME/bin/java -XX:+UseC2 –cp . myprog
The -XX:+UseC2
option uses KestrelC2 JIT compilation. KestrelC2 is based on a lightweight use of the LLVM backend, and typically produces faster code than the deprecated SeaOfNodesC2 while keeping compilation effort at similar levels. KestrelC2 typically exhibits significantly lower compilation-time CPU consumption than Falcon.
Note that while C2 is entirely supported, active development has mostly stopped. As such, switching to C2 should be seen as a workaround until a Falcon issue can be resolved, and you are encouraged to retry Falcon after every major upgrade.
Cloud Native Compiler
Azul’s Cloud Native Compiler can further improve the performance of the Falcon compiler by removing JIT compilation from your JVM and running them on a dedicate server. By offloading JIT compilation to the server, you get faster warm-up times with lower CPU consumption on your client JVMs. See the Cloud Native Compiler documentation for more information.