First, Install GraalVM. Download from https://www.graalvm.org/downloads/ and follow the installtion directions.
C:\tmp>java --version java 23 2024-09-17 Java(TM) SE Runtime Environment Oracle GraalVM 23+37.1 (build 23+37-jvmci-b01) Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 23+37.1 (build 23+37-jvmci-b01, mixed mode, sharing) C:\tmp>javac --version javac 23 C:\tmp>notepad Hello.java C:\tmp>type Hello.java public class Hello { public static void main ( String[] args ) { System.out.println( "Hello!" ); } } C:\tmp>javac Hello.java C:\tmp>java Hello Hello! C:\tmp>native-image --enable-sbom=export Hello ================================================================================ GraalVM Native Image: Generating 'hello' (executable)... ================================================================================ For detailed information and explanations on the build output, visit: https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/BuildOutput.md -------------------------------------------------------------------------------- [1/8] Initializing... (4.4s @ 0.12GB) Java version: 23+37, vendor version: Oracle GraalVM 23+37.1 Graal compiler: optimization level: 2, target machine: x86-64-v3, PGO: ML-inferred C compiler: cl.exe (microsoft, x64, 19.41.34120) Garbage collector: Serial GC (max heap size: 80% of RAM) 1 user-specific feature(s): - com.oracle.svm.thirdparty.gson.GsonFeature -------------------------------------------------------------------------------- Build resources: - 11.87GB of memory (75.6% of 15.71GB system memory, determined at start) - 20 thread(s) (100.0% of 20 available processor(s), determined at start) Warning: We could not find any version info for the following classes: Hello [2/8] Performing analysis... [*****] (2.4s @ 0.19GB) 1,982 reachable types (58.1% of 3,414 total) 1,770 reachable fields (37.6% of 4,711 total) 8,572 reachable methods (35.3% of 24,290 total) 699 types, 7 fields, and 84 methods registered for reflection 53 types, 30 fields, and 48 methods registered for JNI access 1 native library: version 1 native library: version [3/8] Building universe... (0.5s @ 0.20GB) [4/8] Parsing methods... [*] (0.6s @ 0.24GB) [5/8] Inlining methods... [***] (0.4s @ 0.32GB) [6/8] Compiling methods... [***] (5.7s @ 0.46GB) [7/8] Laying out methods... [*] (0.7s @ 0.49GB) [8/8] Creating image... [*] (0.6s @ 0.52GB) 3.04MB (46.78%) for code area: 3,890 compilation units 3.38MB (51.86%) for image heap: 52,647 objects and 52 resources 90.89kB ( 1.36%) for other data 6.51MB in total -------------------------------------------------------------------------------- Top 10 origins of code area: Top 10 object types in image heap: 1.44MB svm.jar (Native Image) 685.75kB byte[] for code metadata 1.32MB java.base 672.64kB byte[] for java.lang.String 86.07kB com.oracle.svm.svm_enterprise 389.26kB heap alignment 35.36kB org.graalvm.nativeimage.base 356.65kB java.lang.String 35.14kB jdk.proxy2 335.68kB java.lang.Class 27.65kB jdk.graal.compiler 147.03kB java.util.HashMap$Node 26.22kB jdk.proxy1 114.52kB char[] 22.94kB org.graalvm.collections 92.91kB com.oracle.svm.core.hub.DynamicHubCompanion 20.91kB jdk.internal.vm.ci 84.84kB java.lang.Object[] 8.13kB jdk.proxy3 81.01kB byte[] for reflection metadata 621.00B for 3 more packages 495.72kB for 510 more object types Use '--emit build-report' to create a report with more details. -------------------------------------------------------------------------------- Security report: - Binary includes Java deserialization. - CycloneDX SBOM with 5 component(s) is exported as JSON (see build artifacts). -------------------------------------------------------------------------------- Recommendations: PGO: Use Profile-Guided Optimizations ('--pgo') for improved throughput. HEAP: Set max heap for improved and more predictable memory usage. CPU: Enable more CPU features with '-march=native' for improved performance. QBM: Use the quick build mode ('-Ob') to speed up builds during development. -------------------------------------------------------------------------------- 1.0s (5.6% of total time) in 349 GCs | Peak RSS: 1.06GB | CPU load: 3.69 -------------------------------------------------------------------------------- Build artifacts: C:\tmp\hello.exe (executable) ================================================================================ Finished generating 'hello' in 16.7s. C:\tmp>dir Volume in drive C is Windows Volume Serial Number is A2D2-438D Directory of C:\tmp 10/04/2024 06:04 PM <DIR> . 10/04/2024 05:26 PM 410 Hello.class 10/04/2024 06:04 PM 6,823,936 hello.exe 10/04/2024 05:25 PM 115 Hello.java 10/04/2024 06:04 PM 1,323 hello.sbom.json 4 File(s) 6,825,784 bytes 1 Dir(s) 527,840,772,096 bytes free C:\tmp>jq <hello.sbom.json { "bomFormat": "CycloneDX", "specVersion": "1.4", "version": 1, "components": [ { "type": "library", "group": "com.oracle.svm", "name": "svm", "version": "23+37", "properties": [ { "name": "syft:cpe23", "value": "cpe:2.3:a:oracle:graalvm-native-image:23+37:*:*:*:*:*:*:*" } ] }, { "type": "library", "group": "jdk.graal", "name": "compiler", "version": "23+37", "properties": [ { "name": "syft:cpe23", "value": "cpe:2.3:a:compiler:compiler:23+37:*:*:*:*:*:*:*" }, { "name": "syft:cpe23", "value": "cpe:2.3:a:graal:compiler:23+37:*:*:*:*:*:*:*" } ] }, { "type": "library", "group": "org.graalvm", "name": "collections", "version": "23+37", "properties": [ { "name": "syft:cpe23", "value": "cpe:2.3:a:collections:collections:23+37:*:*:*:*:*:*:*" }, { "name": "syft:cpe23", "value": "cpe:2.3:a:graalvm:collections:23+37:*:*:*:*:*:*:*" } ] }, { "type": "library", "group": "org.graalvm", "name": "nativeimage", "version": "23+37", "properties": [ { "name": "syft:cpe23", "value": "cpe:2.3:a:graalvm:nativeimage:23+37:*:*:*:*:*:*:*" }, { "name": "syft:cpe23", "value": "cpe:2.3:a:nativeimage:nativeimage:23+37:*:*:*:*:*:*:*" } ] }, { "type": "library", "group": "org.graalvm", "name": "word", "version": "23+37", "properties": [ { "name": "syft:cpe23", "value": "cpe:2.3:a:graalvm:word:23+37:*:*:*:*:*:*:*" }, { "name": "syft:cpe23", "value": "cpe:2.3:a:word:word:23+37:*:*:*:*:*:*:*" } ] } ], "serialNumber": "urn:uuid:e6443a8a-c006-32f7-89f1-e1067dc7e278" } C:\tmp>.\hello Hello! C:\tmp>