- Latest (GraalVM for JDK 21)
- Dev Build
- GraalVM for JDK 21
- GraalVM for JDK 20
- GraalVM for JDK 17
- GraalVM 22.3
- GraalVM 22.2
- GraalVM 22.1
- GraalVM 22.0
- GraalVM 21.3
- Native Image
- Build Output
- Build Configuration
- Tracing Agent
- Native Image Compatibility and Optimization Guide
- Class Initialization in Native Image
- Static Native Images
- Native Image Options
- Native Image Hosted and Runtime Options
- Native Image C API
- Implementing Native Methods in Java with Native Image
- LLVM Backend for Native Image
- Debug Info Feature
- Points-to Analysis Reports
- Using System Properties in Native Images
- Profile-Guided Optimizations
- Memory Management at Image Run Time
- Generating Heap Dumps from Native Images
- JDK Flight Recorder with Native Image
- JCA Security Services on Native Image
- Dynamic Proxy on Native Image
- Java Native Interface (JNI) on Native Image
- Reflection on Native Image
- Accessing Resources in Native Images
- Logging on Native Image
- URL Protocols on Native Image
- Native Image ARM64 Support
- GraalVM Updater
- Languages References
- Embedding Reference
- Polyglot Programming
Native Image Hosted and Runtime Options
Along with all the options listed in the Options guide, Native Image also distinguishes hosted and runtime options.
Hosted options: configure a native image build, i.e., influence what is put into the image and how the image is built. These are set using the prefix
-H:on the command line.
Runtime options: get their initial value during an image generation, using the prefix
-R:on the command line for the native image builder. At runtime, the default prefix is
-XX:(but this is application-specific and not mandated by Native Image).
For developer documentation on how to define and use options, read the documentation of the
List of Useful Options #
Graph Dumping #
Native Image re-used the GraalVM options for graph dumping, logging, counters, and everything else in the GraalVM debug environment. These GraalVM options can be used both as hosted options (if you want to dump graphs of the native image builder), and as runtime options (if you want to dump graphs during dynamic compilation at runtime).
The Graal compiler options that work as expected include
MethodFilter, and the options to specify file names and ports for the dump handlers.
To dump the compiler graphs of the native image builder:
To dump the compile graphs at runtime, specify the dump flags at runtime:
Debug Options #
These options enable additional checks in the generated executable to help with debugging:
-H:[+|-]HostedAssertionsenables or disables Java assert statements in the native image builder. This flag is translated to either
-da -dsafor the HotSpot VM.
-H:[+|-]RuntimeAssertionsenables or disables Java assert statements at run time.
-H:TempDirectory=FileSystemPathgenerates a directory for temporary files during a native image generation. If this option is specified, the temporary files are not deleted so that you can inspect them after the native image generation.
Control the Main Entry Points #
-H:Kind=[EXECUTABLE | SHARED_LIBRARY]: generates an executable with a main entry point, or a shared library with all entry points that are marked via
-H:Class=ClassName: the class containing the default entry point method. Ignored if
Kind == SHARED_LIBRARY.
-H:Projects=Project1,Project2: the project that contains the application (and transitively all projects that it depends on).
-H:Name=FileName: the name of the executable file that is generated.
-H:Path=FileSystemPath: the directory where the generated executable is placed.