Back to Zing Documentation Home
Using ZVM with the Falcon Compiler
Falcon Compiler Features
Supported Java platforms: Java 7, 8, 11, and 13
Recommended Hardware: Modern Intel Chipset (Haswell or later)
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 the ZVM 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 the Zing JVM is running) by destroying the contents of the cache with, for example,
rm -r .zing-falcon-cache.
The Falcon compiler first became available as a feature in Zing 220.127.116.11.
Falcon became the default Tier 2 optimizing compiler in Zing 17.03.0.0.
If, for some reason, you need to switch to the non-default Tier 2 C2 compiler in Zing 17.03.0.0 - 20.03.1.0, use the
-XX:+UseC2 option. For example,
$JAVA_HOME/bin/java -XX:+UseC2 –cp . myprog
Starting with Zing 20.04.0.0, the
-XX:+UseC2 option can use one of two separate implementations of C2 JIT compilation:
A traditional SeaOfNodesC2 mode (see -XX:[+/-]UseSeaOfNodesC2 for details); a C2 implementation that has been part of Zing since 2010.
A new KestrelC2 mode (see -XX:[+/-]UseKestrelC2 for details); a newer C2 implementation introduced to Zing in 2020. It is based on a lightweight use of the LLVM backend, and typically produces faster code than SeaOfNodesC2 while keeping compilation effort at similar levels.
Both KestrelC2 and SeaOfNodesC2 typically exhibit 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.
Run Zing Vision Robot (ZVRobot), the profiling and diagnostic snapshot collection tool for the Zing Virtual Machine (ZVM), together with the application. Basic ZVRobot Usage:
- To the ZVM command-line options add:
- Optionally, configure the VM to collect compiler intermediate representation (IR) dumps for sharing with Azul Support
-XX:FalconIRDumpRoot=<path>– sets the directory in which to dump IR. If not set, defaults to
-XX:FalconDumpIRToDiskOf=*– tells the Falcon compiler to dump its internal IR for compiles which match the specified pattern to disk. This IR can be provided to Azul Support to assist in analyzing performance issues. Enabling this option may affect the performance of the application. This option should not be used outside of a test environment.
- Configure ZVRobot to connect to the ZVM by modifying the ZVRobot properties file. You can configure ZVRobot to collect different amounts of information. Please refer to the Using Zing Vision Robot chapter for more details about the tool.
- Start ZVRobot using the modified properties file created in step 3. Example command:
java -jar ZVRobot-<version>.jar <output_directory> ZVRobot.prop.
- Using the Zing Virtual Machine
- Running a Java Application
- Using ZVM Command-Line Options
- Using ReadyNow!
- Using Compile Stashing
- Using Compact Strings
- Reducing Deoptimizations
- Invoking Zing with Native Application
- Using ZVM Instance Configuration Recommendations
- Using Transport Layer Security (TLS) v1.3
© Azul Systems, Inc. 2020 All rights reserved.