diff --git a/dev/getting-started/oci/cloud-shell/index.html b/dev/getting-started/oci/cloud-shell/index.html index 56d46d02d182..0cbe4e568cf6 100644 --- a/dev/getting-started/oci/cloud-shell/index.html +++ b/dev/getting-started/oci/cloud-shell/index.html @@ -20,7 +20,7 @@ - + diff --git a/dev/getting-started/oci/code-editor/index.html b/dev/getting-started/oci/code-editor/index.html index 226ca08c3a64..f66ce2d18be3 100644 --- a/dev/getting-started/oci/code-editor/index.html +++ b/dev/getting-started/oci/code-editor/index.html @@ -20,7 +20,7 @@ - + diff --git a/dev/getting-started/oci/compute-instance/index.html b/dev/getting-started/oci/compute-instance/index.html index bbd4ec215cea..d862879260c5 100644 --- a/dev/getting-started/oci/compute-instance/index.html +++ b/dev/getting-started/oci/compute-instance/index.html @@ -20,7 +20,7 @@ - + diff --git a/dev/getting-started/oci/devops-build-pipeline/index.html b/dev/getting-started/oci/devops-build-pipeline/index.html index beaad35ef615..d65c660a1cc2 100644 --- a/dev/getting-started/oci/devops-build-pipeline/index.html +++ b/dev/getting-started/oci/devops-build-pipeline/index.html @@ -20,7 +20,7 @@ - + diff --git a/dev/getting-started/oci/index.html b/dev/getting-started/oci/index.html index 2d305e2e87b0..cb16efd28aec 100644 --- a/dev/getting-started/oci/index.html +++ b/dev/getting-started/oci/index.html @@ -20,7 +20,7 @@ - + diff --git a/docs/search/index.html b/docs/search/index.html index 1713d0f98cd1..8b3b121c5623 100644 --- a/docs/search/index.html +++ b/docs/search/index.html @@ -1404,7 +1404,7 @@

Search Results

"latest-getting-started-oci-code-editor": { "title": "Oracle GraalVM in OCI Code Editor", - "content": "Oracle GraalVM in OCI Code EditorThis guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infrastructure (OCI) Code Editor.OCI Code Editor provides a rich, in-console editing environment that enables you to edit code without having to switch between the Oracle Cloud Console and your local development environment. The Code Editor enables you to edit and deploy code for OCI services directly from the OCI Console.Oracle GraalVM for JDK 17 is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. Code Editor’s integration with Cloud Shell gives you direct access to it. Note: Oracle GraalVM license and support are included in the Oracle Cloud Infrastructure subscription at no additional cost.Create and Run a Java Application in OCI Code EditorStep 1: Open a Terminal in Code Editor Login to the Oracle Cloud Console and launch Code Editor. Open a Terminal in Code Editor, by clicking New Terminal from the Terminal menu.Step 2: Select GraalVM JDK as the Default JDK List the installed JDKs using the csruntimectl java list command. csruntimectl java list The output lists the JDKs preinstalled in Cloud Shell: Oracle GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. Select Oracle GraalVM for JDK 17 as the current JDK: csruntimectl java set graalvmjdk-17 You will see the confirmation message printed: “The current managed java version is set to graalvmjdk-17”. Now confirm the values of the environment variables PATH and JAVA_HOME, and the versions of java and the native-image tool: echo $JAVA_HOME echo $PATH java -version native-image --version Step 3: Setup a Java Project and Run Clone a demo repository and open it in OCI Code Editor. To achieve this, run the following commands one by one: git init graalvmee-java-hello-world cd graalvmee-java-hello-world git remote add origin https://github.com/oracle-devrel/oci-code-editor-samples.git git config core.sparsecheckout true echo "java-samples/graalvmee-java-hello-world/*">>.git/info/sparse-checkout git pull --depth=1 origin main cd java-samples/graalvmee-java-hello-world/ You can now view/edit the sample code in Code Editor. Package the sample application into a runnable JAR file: mvn clean package Run the JAR file: java -jar target/my-app-1.0-SNAPSHOT.jar It prints out “Hello World!”. Step 4: Build and Run a Native ExecutableThis Java application incorporates the Maven plugin for GraalVM Native Image that adds support for building native executables using Apache Maven. For testing purposes, build a native executable with the quick build mode first enabled and then disabled.Quick Build Mode Enabled To enable the quick build mode, uncomment this line in pom.xml, as follows: <quickBuild>true</quickBuild> Build a native executable using the native Maven profile: mvn clean -Pnative -DskipTests package This will generate a native executable for Linux in the target directory, named my-app. Run the app native executable in the background: ./target/my-app Quick Build Mode Disabled To disable the quick build mode, comment out this line in pom.xml, as follows: <!-- <quickBuild>true</quickBuild> --> Build a native executable again: mvn clean -Pnative -DskipTests package This will generate a native executable, my-app, in the target directory, replacing the previous one. You have probably noticed how the quick build mode reduced the time required to generate a native executable, making it easier to use Native Image in a typical development cycle (compile, test, and debug). However, the size of a generated executable is larger and peak performance is worse. The quick build mode is recommended for development purposes only. Run the native executable: ./target/my-app Congratulations! You have successfully built and run a native executable using Oracle GraalVM in OCI Code Editor without the need to switch between the Oracle Cloud Console and your local development environments.The Code Editor allows you to accomplish quick coding tasks and run applications directly from the OCI Console.Related Documentation Java Hello World with Oracle GraalVM in OCI Code Editor Micronaut Hello World REST App with Oracle GraalVM in OCI Code Editor Spring Boot Microservice with Oracle GraalVM in OCI Code Editor Working with Code Editor Oracle GraalVM in OCI Cloud Shell", + "content": "Oracle GraalVM in OCI Code EditorThis guide shows you how to get started with Oracle GraalVM in Oracle Cloud Infrastructure (OCI) Code Editor.OCI Code Editor provides a rich, in-console editing environment that enables you to edit code without having to switch between the Oracle Cloud Console and your local development environment. The Code Editor enables you to edit and deploy code for OCI services directly from the OCI Console.Oracle GraalVM for JDK 17 is preinstalled in Cloud Shell, so you do not have to install and configure a development machine. Code Editor’s integration with Cloud Shell gives you direct access to it. Note: Oracle GraalVM license and support are included in the Oracle Cloud Infrastructure subscription at no additional cost.Create and Run a Java Application in OCI Code EditorStep 1: Open a Terminal in Code Editor Login to the Oracle Cloud Console and launch Code Editor. Open a Terminal in Code Editor, by clicking New Terminal from the Terminal menu.Step 2: Select GraalVM JDK as the Default JDK List the installed JDKs using the csruntimectl java list command. csruntimectl java list The output lists the JDKs preinstalled in Cloud Shell: Oracle GraalVM for JDK 17, Oracle JDK 11, and Oracle JDK 8. The JDK marked with an asterisk is the current JDK. Select Oracle GraalVM for JDK 17 as the current JDK: csruntimectl java set graalvmjdk-17 You will see the confirmation message printed: “The current managed java version is set to graalvmjdk-17”. Now confirm the values of the environment variables PATH and JAVA_HOME, and the versions of java and the native-image tool: echo $JAVA_HOME echo $PATH java -version native-image --version Step 3: Setup a Java Project and Run Clone a demo repository and open it in OCI Code Editor. To achieve this, run the following commands one by one: git init graalvmee-java-hello-world cd graalvmee-java-hello-world git remote add origin https://github.com/oracle-devrel/oci-code-editor-samples.git git config core.sparsecheckout true echo "java-samples/graalvmee-java-hello-world/*">>.git/info/sparse-checkout git pull --depth=1 origin main cd java-samples/graalvmee-java-hello-world/ You can now view/edit the sample code in Code Editor. Package the sample application into a runnable JAR file: mvn clean package Run the JAR file: java -jar target/my-app-1.0-SNAPSHOT.jar It prints out “Hello World!”. Step 4: Build and Run a Native ExecutableThis Java application incorporates the Maven plugin for GraalVM Native Image that adds support for building native executables using Apache Maven. For testing purposes, build a native executable with the quick build mode first enabled and then disabled.Quick Build Mode Enabled To enable the quick build mode, uncomment this line in pom.xml, as follows: <quickBuild>true</quickBuild> Build a native executable using the native Maven profile: mvn clean -Pnative -DskipTests package This will generate a native executable for Linux in the target directory, named my-app. Run the app native executable in the background: ./target/my-app Quick Build Mode Disabled To disable the quick build mode, comment out this line in pom.xml, as follows: <!-- <quickBuild>true</quickBuild> --> Build a native executable again: mvn clean -Pnative -DskipTests package This will generate a native executable, my-app, in the target directory, replacing the previous one. You have probably noticed how the quick build mode reduced the time required to generate a native executable, making it easier to use Native Image in a typical development cycle (compile, test, and debug). However, the size of a generated executable is larger and peak performance is worse. The quick build mode is recommended for development purposes only. Run the native executable: ./target/my-app Congratulations! You have successfully built and run a native executable using Oracle GraalVM in OCI Code Editor without the need to switch between the Oracle Cloud Console and your local development environments.The Code Editor allows you to accomplish quick coding tasks and run applications directly from the OCI Console.Related Documentation Java Hello World with Oracle GraalVM in OCI Code Editor Micronaut Hello World REST App with Oracle GraalVM in OCI Code Editor Working with Code Editor Oracle GraalVM in OCI Cloud Shell", "url": " /latest/getting-started/oci/code-editor/" }, @@ -1446,7 +1446,7 @@

Search Results

"latest-reference-manual-native-image-guides-containerise-native-executable-and-run-in-docker-container": { "title": "Containerize a Native Executable and Run in a Container", - "content": "Containerize a Native Executable and Run in a ContainerContainers provide the flexibility of development environments to match a production environment, to help isolate your application, and to minimize overhead. For self-contained executables, generated with GraalVM Native Image, containers are an obvious deployment choice.To support container-based development, there are several GraalVM container images available, depending on the platform, the architecture, the Java version, and the edition: Oracle GraalVM container images, available in Oracle Container Registry (OCR) under the GraalVM Free Terms and Conditions (GFTC) license. GraalVM Community Edition container images published in the GitHub Container Registry.This guide shows how to containerize a native executable for your Java application.You will use a GraalVM container image with Native Image to compile a Java application ahead-of-time into a native executable.Download a Sample ApplicationThis guide uses the Spring Boot 3 Native Image Microservice example.The example is a minimal REST-based API application, built on top of Spring Boot 3.If you call the HTTP endpoint /jibber, it will return some nonsense verse generated in the style of the Jabberwocky poem, by Lewis Carroll.PrerequisiteMake sure you have installed a GraalVM JDK.The easiest way to get started is with SDKMAN!.For other installation options, visit the Downloads section. Install and run a Docker-API compatible container runtime such as Rancher Desktop, Docker, or Podman. Clone the GraalVM Demos repository: git clone https://github.com/graalvm/graalvm-demos.git Change directory to native-image/containerize/: cd graalvm-demos/native-image/containerize Build and Run as a Native ExecutableWith the built-in support for GraalVM Native Image in Spring Boot 3, it has become much easier to compile a Spring Boot 3 application into a native executable. Build a native executable: ./mvnw native:compile -Pnative The -Pnative profile is used to generate a native executable for your platform. This will generate a native executable called benchmark-jibber in the target/ directory. Run the native executable and put it into the background by appending &: ./target/benchmark-jibber & Call the endpoint using curl: curl http://localhost:8080/jibber You should get a random nonsense verse. Bring the application to the foreground using fg, and then enter <CTRL-c> to stop the application.Containerize the Native ExecutableThe generated native executable is platform-dependent. Containerize the native executable using the following commands. On Linux, containerize the native executable generated in the previous step: docker build -f Dockerfiles/Dockerfile.native --build-arg APP_FILE=benchmark-jibber -t jibber-benchmark:native.0.0.1-SNAPSHOT . On MacOS, Windows, or Linux, use multistage Docker builds to build a native executable inside a container, and package the native executable in a lightweight container image: docker build -f Dockerfiles/Dockerfile -t jibber-benchmark:native.0.0.1-SNAPSHOT . Run the application: docker run --rm --name native -p 8080:8080 jibber-benchmark:native.0.0.1-SNAPSHOT From a new terminal window, call the endpoint using curl: curl http://localhost:8080/jibber It should generate a random nonsense verse. To stop the application, first get the container id using docker ps, and then run: docker rm -f <container_id> To delete the container images, first get the image id using docker images, and then run: docker rmi -f <image_1_id> <image_n_id> SummaryIn this guide, you saw how to use GraalVM container images to containerize a native executable for your Java application.With GraalVM Native Image you can also build fully static native executables and package them directly into tiny containers such as scratch or distroless containers.Related Documentation Build a Native Executable from a Spring Boot Application Oracle GraalVM Container Images Hands-on Lab: GraalVM Native Image, Spring and Containerisation", + "content": "Containerize a Native Executable and Run in a ContainerContainers provide the flexibility of development environments to match a production environment, to help isolate your application, and to minimize overhead. For self-contained executables, generated with GraalVM Native Image, containers are an obvious deployment choice.To support container-based development, there are several GraalVM container images available, depending on the platform, the architecture, the Java version, and the edition: Oracle GraalVM container images, available in Oracle Container Registry (OCR) under the GraalVM Free Terms and Conditions (GFTC) license. GraalVM Community Edition container images published in the GitHub Container Registry.This guide shows how to containerize a native executable for your Java application.You will use a GraalVM container image with Native Image to compile a Java application ahead-of-time into a native executable.Download a Sample ApplicationThis guide uses the Spring Boot 3 Native Image Microservice example.The example is a minimal REST-based API application, built on top of Spring Boot 3.If you call the HTTP endpoint /jibber, it will return some nonsense verse generated in the style of the Jabberwocky poem, by Lewis Carroll.PrerequisiteMake sure you have installed a GraalVM JDK.The easiest way to get started is with SDKMAN!.For other installation options, visit the Downloads section. Install and run a Docker-API compatible container runtime such as Rancher Desktop, Docker, or Podman. Clone the GraalVM Demos repository: git clone https://github.com/graalvm/graalvm-demos.git Change directory to native-image/containerize/: cd graalvm-demos/native-image/containerize/spring-boot-microservice-jibber Build and Run as a Native ExecutableWith the built-in support for GraalVM Native Image in Spring Boot 3, it has become much easier to compile a Spring Boot 3 application into a native executable. Build a native executable: ./mvnw native:compile -Pnative The -Pnative profile is used to generate a native executable for your platform. This will generate a native executable called benchmark-jibber in the target/ directory. Run the native executable and put it into the background by appending &: ./target/benchmark-jibber & Call the endpoint using curl: curl http://localhost:8080/jibber You should get a random nonsense verse. Bring the application to the foreground using fg, and then enter <CTRL-c> to stop the application.Containerize the Native ExecutableThe generated native executable is platform-dependent. Containerize the native executable using the following commands. On Linux, containerize the native executable generated in the previous step: docker build -f Dockerfiles/Dockerfile.native --build-arg APP_FILE=benchmark-jibber -t jibber-benchmark:native.0.0.1-SNAPSHOT . On MacOS, Windows, or Linux, use multistage Docker builds to build a native executable inside a container, and package the native executable in a lightweight container image: docker build -f Dockerfiles/Dockerfile -t jibber-benchmark:native.0.0.1-SNAPSHOT . Run the application: docker run --rm --name native -p 8080:8080 jibber-benchmark:native.0.0.1-SNAPSHOT From a new terminal window, call the endpoint using curl: curl http://localhost:8080/jibber It should generate a random nonsense verse. To stop the application, first get the container id using docker ps, and then run: docker rm -f <container_id> To delete the container images, first get the image id using docker images, and then run: docker rmi -f <image_1_id> <image_n_id> SummaryIn this guide, you saw how to use GraalVM container images to containerize a native executable for your Java application.With GraalVM Native Image you can also build fully static native executables and package them directly into tiny containers such as scratch or distroless containers.Related Documentation Build a Native Executable from a Spring Boot Application Oracle GraalVM Container Images Hands-on Lab: GraalVM Native Image, Spring and Containerisation", "url": " /latest/reference-manual/native-image/guides/containerise-native-executable-and-run-in-docker-container/" }, @@ -1458,7 +1458,7 @@

Search Results

"latest-reference-manual-native-image-guides-create-heap-dump": { "title": "Create a Heap Dump from a Native Executable", - "content": "Create a Heap Dump from a Native ExecutableYou can create a heap dump of a running executable to monitor its execution.Just like any other Java heap dump, it can be opened with the VisualVM tool.To enable heap dump support, a native executable must be built with the --enable-monitoring=heapdump option. A heap dump can then be created in the following ways: Create a heap dump with VisualVM. The command-line option -XX:+HeapDumpOnOutOfMemoryError can be used to create a heap dump when the native executable runs out of Java heap memory. Dump the initial heap of a native executable using the -XX:+DumpHeapAndExit command-line option. Create a heap dump by sending a SIGUSR1 signal to the application at runtime. Create a heap dump programmatically using the org.graalvm.nativeimage.VMRuntime#dumpHeap API.All approaches are described below. Note: By default, a heap dump is created in the current working directory. The -XX:HeapDumpPath option can be used to specify an alternative filename or directory. For example:./helloworld -XX:HeapDumpPath=$HOME/helloworld.hprof Creating a heap dump on the Microsoft Windows platform is not supported.Create a Heap Dump with VisualVMA convenient way to create a heap dump is to use VisualVM.For this, you need to add jvmstat to the --enable-monitoring option (for example, --enable-monitoring=heapdump,jvmstat).This will allow VisualVM to pick up and list running Native Image processes.You can then request a heap dump in the same way you can request one when your application runs on the JVM (for example, right-click on the process, then select Heap Dump).Create a Heap Dump on OutOfMemoryErrorStart the application with the option -XX:+HeapDumpOnOutOfMemoryError to get a heap dump when the native executable throws an OutOfMemoryError because it ran out of Java heap memory.The heap dump is created in a file named svm-heapdump-<PID>-OOME.hprof.For example:./mem-leak-example -XX:+HeapDumpOnOutOfMemoryErrorDumping heap to svm-heapdump-67799-OOME.hprof ...Heap dump file created [10046752 bytes in 0.49 secs]Exception in thread "main" java.lang.OutOfMemoryError: Garbage-collected heap size exceeded.Dump the Initial Heap of a Native ExecutableUse the -XX:+DumpHeapAndExit command-line option to dump the initial heap of a native executable.This can be useful to identify which objects the Native Image build process allocated to the executable’s heap. For a HelloWorld example, use the option as follows:$JAVA_HOME/bin/native-image HelloWorld --enable-monitoring=heapdump./helloworld -XX:+DumpHeapAndExitHeap dump created at '/path/to/helloworld.hprof'.Create a Heap Dump with SIGUSR1 (Linux/macOS only) Note: This requires the Signal API, which is enabled by default except when building shared libraries.The following example is a simple multithreaded Java application that runs for 60 seconds. This provides you with enough time to send it a SIGUSR1 signal. The application will handle the signal and create a heap dump in the application’s working directory. The heap dump will contain the Collection of Persons referenced by the static variable CROWD.Follow these steps to build a native executable that will produce a heap dump when it receives a SIGUSR1 signal.PrerequisiteMake sure you have installed a GraalVM JDK.The easiest way to get started is with SDKMAN!.For other installation options, visit the Downloads section. Save the following code in a file named SVMHeapDump.java: import java.nio.charset.Charset;import java.text.DateFormat;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.Random;import org.graalvm.nativeimage.ProcessProperties;public class SVMHeapDump extends Thread { static Collection<Person> CROWD = new ArrayList<>(); static DateFormat DATE_FORMATTER = DateFormat.getDateTimeInstance(); static int i = 0; static int runs = 60; static int sleepTime = 1000; @Override public void run() { System.out.println(DATE_FORMATTER.format(new Date()) + ": Thread started, it will run for " + runs + " seconds"); while (i < runs) { // Add a new person to the collection CROWD.add(new Person()); System.out.println("Sleeping for " + (runs - i) + " seconds."); try { Thread.sleep(sleepTime); } catch (InterruptedException ie) { System.out.println("Sleep interrupted."); } i++; } } /** * @param args the command line arguments */ public static void main(String[] args) throws InterruptedException { // Add objects to the heap for (int i = 0; i < 1000; i++) { CROWD.add(new Person()); } long pid = ProcessProperties.getProcessID(); StringBuffer sb1 = new StringBuffer(100); sb1.append(DATE_FORMATTER.format(new Date())); sb1.append(": Hello GraalVM native image developer! n"); sb1.append("The PID of this process is: " + pid + "n"); sb1.append("Send it a signal: "); sb1.append("'kill -SIGUSR1 " + pid + "' n"); sb1.append("to dump the heap into the working directory.n"); sb1.append("Starting thread!"); System.out.println(sb1); SVMHeapDump t = new SVMHeapDump(); t.start(); while (t.isAlive()) { t.join(0); } sb1 = new StringBuffer(100); sb1.append(DATE_FORMATTER.format(new Date())); sb1.append(": Thread finished after: "); sb1.append(i); sb1.append(" iterations."); System.out.println(sb1); }}class Person { private static Random R = new Random(); private String name; private int age; public Person() { byte[] array = new byte[7]; R.nextBytes(array); name = new String(array, Charset.forName("UTF-8")); age = R.nextInt(100); }} Build a native executable: Compile SVMHeapDump.java as follows: javac SVMHeapDump.java Build a native executable using the --enable-monitoring=heapdump command-line option. (This causes the resulting native executable to produce a heap dump when it receives a SIGUSR1 signal.) native-image SVMHeapDump --enable-monitoring=heapdump The native-image builder creates a native executable from the file SVMHeapDump.class. When the command completes, the native executable svmheapdump is created in the current directory. Run the application, send it a signal, and check the heap dump: Run the application: ./svmheapdump 17 May 2022, 16:38:13: Hello GraalVM native image developer! The PID of this process is: 57509 Send it a signal: 'kill -SIGUSR1 57509' to dump the heap into the working directory. Starting thread! 17 May 2022, 16:38:13: Thread started, it will run for 60 seconds Make a note of the PID and open a second terminal. Use the PID to send a signal to the application. For example, if the PID is 57509: kill -SIGUSR1 57509 The heap dump will be created in the working directory while the application continues to run. The heap dump can be opened with the VisualVM tool, as illustrated below. Create a Heap Dump from within a Native ExecutableThe following example shows how to create a heap dump from a running native executable using VMRuntime.dumpHeap() if some condition is met.The condition to create a heap dump is provided as an option on the command line. Save the code below in a file named SVMHeapDumpAPI.java. import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.Charset; import java.text.DateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Random; import org.graalvm.nativeimage.VMRuntime; public class SVMHeapDumpAPI { static Collection<Person> CROWD = new ArrayList<>(); /** * @param args the command line arguments */ public static void main(String[] args) { // Populate the crowd for (int i = 0; i < 1000; i++) { CROWD.add(new Person()); } StringBuffer sb1 = new StringBuffer(100); sb1.append(DateFormat.getDateTimeInstance().format(new Date())); sb1.append(": Hello GraalVM native image developer. nYour command line options are: "); if (args.length > 0) { sb1.append(args[0]); System.out.println(sb1); if (args[0].equalsIgnoreCase("--heapdump")) { createHeapDump(); } } else { sb1.append("None"); System.out.println(sb1); } } /** * Create a heap dump and save it into temp file */ private static void createHeapDump() { try { File file = File.createTempFile("SVMHeapDumpAPI-", ".hprof"); VMRuntime.dumpHeap(file.getAbsolutePath(), false); System.out.println(" Heap dump created " + file.getAbsolutePath() + ", size: " + file.length()); } catch (UnsupportedOperationException unsupported) { System.err.println("Heap dump creation failed: " + unsupported.getMessage()); } catch (IOException ioe) { System.err.println("IO went wrong: " + ioe.getMessage()); } } } class Person { private static Random R = new Random(); private String name; private int age; public Person() { byte[] array = new byte[7]; R.nextBytes(array); name = new String(array, Charset.forName("UTF-8")); age = R.nextInt(100); } } As in the earlier example, the application creates a Collection of Persons referenced by the static variable CROWD. It then checks the command line to see if heap dump has to be created, and then in method createHeapDump() creates the heap dump. Build a native executable. Compile SVMHeapDumpAPI.java and build a native executable: javac SVMHeapDumpAPI.java native-image SVMHeapDumpAPI When the command completes, the svmheapdumpapi native executable is created in the current directory. Run the application and check the heap dump Now you can run your native executable and create a heap dump from it with output similar to the following: ./svmheapdumpapi --heapdump Sep 15, 2020, 4:06:36 PM: Hello GraalVM native image developer. Your command line options are: --heapdump Heap dump created /var/folders/hw/s9d78jts67gdc8cfyq5fjcdm0000gp/T/SVMHeapDump-6437252222863577987.hprof, size: 8051959 The resulting heap dump can be then opened with the VisualVM tool like any other Java heap dump, as illustrated below. Related Documentation Debugging and Diagnostics VisualVM", + "content": "Create a Heap Dump from a Native ExecutableYou can create a heap dump of a running executable to monitor its execution.Just like any other Java heap dump, it can be opened with the VisualVM tool.To enable heap dump support, a native executable must be built with the --enable-monitoring=heapdump option. A heap dump can then be created in the following ways: Create a heap dump with VisualVM. The command-line option -XX:+HeapDumpOnOutOfMemoryError can be used to create a heap dump when the native executable runs out of Java heap memory. Dump the initial heap of a native executable using the -XX:+DumpHeapAndExit command-line option. Create a heap dump by sending a SIGUSR1 signal to the application at runtime. Create a heap dump programmatically using the org.graalvm.nativeimage.VMRuntime#dumpHeap API.All approaches are described below. Note: By default, a heap dump is created in the current working directory. The -XX:HeapDumpPath option can be used to specify an alternative filename or directory. For example:./helloworld -XX:HeapDumpPath=$HOME/helloworld.hprof Creating a heap dump on the Microsoft Windows platform is not supported.Create a Heap Dump with VisualVMA convenient way to create a heap dump is to use VisualVM.For this, you need to add jvmstat to the --enable-monitoring option (for example, --enable-monitoring=heapdump,jvmstat).This will allow VisualVM to pick up and list running Native Image processes.You can then request a heap dump in the same way you can request one when your application runs on the JVM (for example, right-click on the process, then select Heap Dump).Create a Heap Dump on OutOfMemoryErrorStart the application with the option -XX:+HeapDumpOnOutOfMemoryError to get a heap dump when the native executable throws an OutOfMemoryError because it ran out of Java heap memory.The heap dump is created in a file named svm-heapdump-<PID>-OOME.hprof.For example:./mem-leak-example -XX:+HeapDumpOnOutOfMemoryErrorYou should see a similar output:Dumping heap to svm-heapdump-67799-OOME.hprof ...Heap dump file created [10046752 bytes in 0.49 secs]Exception in thread "main" java.lang.OutOfMemoryError: Garbage-collected heap size exceeded.Dump the Initial Heap of a Native ExecutableUse the -XX:+DumpHeapAndExit command-line option to dump the initial heap of a native executable.This can be useful to identify which objects the Native Image build process allocated to the executable’s heap. For a HelloWorld example, use the option as follows:native-image HelloWorld --enable-monitoring=heapdump./helloworld -XX:+DumpHeapAndExitThe heap dump is created at path/to/helloworld.hprof.Create a Heap Dump with SIGUSR1 (Linux/macOS only) Note: This requires the Signal API, which is enabled by default except when building shared libraries.The following example is a simple multithreaded Java application that runs for 60 seconds. This provides you with enough time to send it a SIGUSR1 signal. The application will handle the signal and create a heap dump in the application’s working directory. The heap dump will contain the Collection of Persons referenced by the static variable CROWD.Follow these steps to build a native executable that will produce a heap dump when it receives a SIGUSR1 signal.PrerequisiteMake sure you have installed a GraalVM JDK.The easiest way to get started is with SDKMAN!.For other installation options, visit the Downloads section. Save the following code in a file named SVMHeapDump.java: import java.nio.charset.Charset;import java.text.DateFormat;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.Random;import org.graalvm.nativeimage.ProcessProperties;public class SVMHeapDump extends Thread { static Collection<Person> CROWD = new ArrayList<>(); static DateFormat DATE_FORMATTER = DateFormat.getDateTimeInstance(); static int i = 0; static int runs = 60; static int sleepTime = 1000; @Override public void run() { System.out.println(DATE_FORMATTER.format(new Date()) + ": Thread started, it will run for " + runs + " seconds"); while (i < runs) { // Add a new person to the collection CROWD.add(new Person()); System.out.println("Sleeping for " + (runs - i) + " seconds."); try { Thread.sleep(sleepTime); } catch (InterruptedException ie) { System.out.println("Sleep interrupted."); } i++; } } /** * @param args the command line arguments */ public static void main(String[] args) throws InterruptedException { // Add objects to the heap for (int i = 0; i < 1000; i++) { CROWD.add(new Person()); } long pid = ProcessProperties.getProcessID(); StringBuffer sb1 = new StringBuffer(100); sb1.append(DATE_FORMATTER.format(new Date())); sb1.append(": Hello GraalVM native image developer! n"); sb1.append("The PID of this process is: " + pid + "n"); sb1.append("Send it a signal: "); sb1.append("'kill -SIGUSR1 " + pid + "' n"); sb1.append("to dump the heap into the working directory.n"); sb1.append("Starting thread!"); System.out.println(sb1); SVMHeapDump t = new SVMHeapDump(); t.start(); while (t.isAlive()) { t.join(0); } sb1 = new StringBuffer(100); sb1.append(DATE_FORMATTER.format(new Date())); sb1.append(": Thread finished after: "); sb1.append(i); sb1.append(" iterations."); System.out.println(sb1); }}class Person { private static Random R = new Random(); private String name; private int age; public Person() { byte[] array = new byte[7]; R.nextBytes(array); name = new String(array, Charset.forName("UTF-8")); age = R.nextInt(100); }} Build a native executable: Compile SVMHeapDump.java as follows: javac SVMHeapDump.java Build a native executable using the --enable-monitoring=heapdump command-line option. (This causes the resulting native executable to produce a heap dump when it receives a SIGUSR1 signal.) native-image SVMHeapDump --enable-monitoring=heapdump The native-image builder creates a native executable from the file SVMHeapDump.class. When the command completes, the native executable svmheapdump is created in the current directory. Run the application, send it a signal, and check the heap dump: Run the application: ./svmheapdump You should see a similar output: 17 May 2022, 16:38:13: Hello GraalVM native image developer! The PID of this process is: 57509 Send it a signal: 'kill -SIGUSR1 57509' to dump the heap into the working directory. Starting thread! 17 May 2022, 16:38:13: Thread started, it will run for 60 seconds Make a note of the PID and open a second terminal. Use the PID to send a signal to the application. For example, if the PID is 57509: kill -SIGUSR1 57509 The heap dump will be created in the working directory while the application continues to run. The heap dump can be opened with the VisualVM tool, as illustrated below. Create a Heap Dump from within a Native ExecutableThe following example shows how to create a heap dump from a running native executable using VMRuntime.dumpHeap() if some condition is met.The condition to create a heap dump is provided as an option on the command line. Save the code below in a file named SVMHeapDumpAPI.java. import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.Charset; import java.text.DateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Random; import org.graalvm.nativeimage.VMRuntime; public class SVMHeapDumpAPI { static Collection<Person> CROWD = new ArrayList<>(); /** * @param args the command line arguments */ public static void main(String[] args) { // Populate the crowd for (int i = 0; i < 1000; i++) { CROWD.add(new Person()); } StringBuffer sb1 = new StringBuffer(100); sb1.append(DateFormat.getDateTimeInstance().format(new Date())); sb1.append(": Hello GraalVM native image developer. nYour command line options are: "); if (args.length > 0) { sb1.append(args[0]); System.out.println(sb1); if (args[0].equalsIgnoreCase("--heapdump")) { createHeapDump(); } } else { sb1.append("None"); System.out.println(sb1); } } /** * Create a heap dump and save it into temp file */ private static void createHeapDump() { try { File file = File.createTempFile("SVMHeapDumpAPI-", ".hprof"); VMRuntime.dumpHeap(file.getAbsolutePath(), false); System.out.println(" Heap dump created " + file.getAbsolutePath() + ", size: " + file.length()); } catch (UnsupportedOperationException unsupported) { System.err.println("Heap dump creation failed: " + unsupported.getMessage()); } catch (IOException ioe) { System.err.println("IO went wrong: " + ioe.getMessage()); } } } class Person { private static Random R = new Random(); private String name; private int age; public Person() { byte[] array = new byte[7]; R.nextBytes(array); name = new String(array, Charset.forName("UTF-8")); age = R.nextInt(100); } } As in the earlier example, the application creates a Collection of Persons referenced by the static variable CROWD. It then checks the command line to see if heap dump has to be created, and then in method createHeapDump() creates the heap dump. Build a native executable. Compile SVMHeapDumpAPI.java and build a native executable: javac SVMHeapDumpAPI.java native-image SVMHeapDumpAPI When the command completes, the svmheapdumpapi native executable is created in the current directory. Run the application and create a heap dump: ./svmheapdumpapi --heapdump You should see a similar output: Sep 15, 2020, 4:06:36 PM: Hello GraalVM native image developer. Your command line options are: --heapdump Heap dump created /var/folders/hw/s9d78jts67gdc8cfyq5fjcdm0000gp/T/SVMHeapDump-6437252222863577987.hprof, size: 8051959 The resulting heap dump can be then opened with the VisualVM tool like any other Java heap dump, as illustrated below. Related Documentation Debugging and Diagnostics VisualVM", "url": " /latest/reference-manual/native-image/guides/create-heap-dump/" }, diff --git a/index.html b/index.html index d5053028b87a..455d7387ef1a 100644 --- a/index.html +++ b/index.html @@ -488,7 +488,7 @@
Use the GraalVM JDK with the optimizing Graal just-in-time (JIT) compiler to polyglot programming icon
-

Additional Languages

+

Graal Languages

Extend your Java applications with code written in other languages or accelerate other languages with GraalVM.
diff --git a/jdk23/getting-started/oci/cloud-shell/index.html b/jdk23/getting-started/oci/cloud-shell/index.html index 6f3b2d14a822..956fbe7290a5 100644 --- a/jdk23/getting-started/oci/cloud-shell/index.html +++ b/jdk23/getting-started/oci/cloud-shell/index.html @@ -20,7 +20,7 @@ - + diff --git a/jdk23/getting-started/oci/code-editor/index.html b/jdk23/getting-started/oci/code-editor/index.html index 355ecb0b8652..903e3f7c8a89 100644 --- a/jdk23/getting-started/oci/code-editor/index.html +++ b/jdk23/getting-started/oci/code-editor/index.html @@ -20,7 +20,7 @@ - + @@ -182,7 +182,6 @@ diff --git a/jdk23/getting-started/oci/compute-instance/index.html b/jdk23/getting-started/oci/compute-instance/index.html index 11787ae34582..bc5ab12ad263 100644 --- a/jdk23/getting-started/oci/compute-instance/index.html +++ b/jdk23/getting-started/oci/compute-instance/index.html @@ -20,7 +20,7 @@ - + diff --git a/jdk23/getting-started/oci/devops-build-pipeline/index.html b/jdk23/getting-started/oci/devops-build-pipeline/index.html index dcc6d2940a0b..fcb9f214b82e 100644 --- a/jdk23/getting-started/oci/devops-build-pipeline/index.html +++ b/jdk23/getting-started/oci/devops-build-pipeline/index.html @@ -20,7 +20,7 @@ - + diff --git a/jdk23/getting-started/oci/index.html b/jdk23/getting-started/oci/index.html index 0156a9c1fb91..a6534e8983e5 100644 --- a/jdk23/getting-started/oci/index.html +++ b/jdk23/getting-started/oci/index.html @@ -20,7 +20,7 @@ - + diff --git a/jdk23/reference-manual/native-image/guides/containerise-native-executable-and-run-in-docker-container/index.html b/jdk23/reference-manual/native-image/guides/containerise-native-executable-and-run-in-docker-container/index.html index a79248c7f784..cc8160ea2100 100644 --- a/jdk23/reference-manual/native-image/guides/containerise-native-executable-and-run-in-docker-container/index.html +++ b/jdk23/reference-manual/native-image/guides/containerise-native-executable-and-run-in-docker-container/index.html @@ -160,7 +160,7 @@

Containerize a

Download a Sample Application

-

This guide uses the Spring Boot 3 Native Image Microservice example. +

This guide uses the Spring Boot 3 Native Image Microservice example. The example is a minimal REST-based API application, built on top of Spring Boot 3. If you call the HTTP endpoint /jibber, it will return some nonsense verse generated in the style of the Jabberwocky poem, by Lewis Carroll.

@@ -178,7 +178,7 @@

Prerequisite

  • Change directory to native-image/containerize/: -
     cd graalvm-demos/native-image/containerize
    +    
     cd graalvm-demos/native-image/containerize/spring-boot-microservice-jibber
     
  • diff --git a/jdk23/reference-manual/native-image/guides/create-heap-dump/index.html b/jdk23/reference-manual/native-image/guides/create-heap-dump/index.html index f708f2637379..1538b9f84aec 100644 --- a/jdk23/reference-manual/native-image/guides/create-heap-dump/index.html +++ b/jdk23/reference-manual/native-image/guides/create-heap-dump/index.html @@ -184,7 +184,9 @@

    Create a Heap Dump on OutO For example:

    ./mem-leak-example -XX:+HeapDumpOnOutOfMemoryError
    -Dumping heap to svm-heapdump-67799-OOME.hprof ...
    +
    +

    You should see a similar output:

    +
    Dumping heap to svm-heapdump-67799-OOME.hprof ...
     Heap dump file created [10046752 bytes in 0.49 secs]
     Exception in thread "main" java.lang.OutOfMemoryError: Garbage-collected heap size exceeded.
     
    @@ -195,11 +197,13 @@

    Dump the Initial Heap of a This can be useful to identify which objects the Native Image build process allocated to the executable’s heap. For a HelloWorld example, use the option as follows:

    -
    $JAVA_HOME/bin/native-image HelloWorld --enable-monitoring=heapdump
    -./helloworld -XX:+DumpHeapAndExit
    -Heap dump created at '/path/to/helloworld.hprof'.
    +
    native-image HelloWorld --enable-monitoring=heapdump
    +
    +
    ./helloworld -XX:+DumpHeapAndExit
     
    +

    The heap dump is created at path/to/helloworld.hprof.

    +

    Create a Heap Dump with SIGUSR1 (Linux/macOS only)

    @@ -318,7 +322,9 @@

    Prerequisite

    Run the application:

     ./svmheapdump
    - 17 May 2022, 16:38:13: Hello GraalVM native image developer! 
    +
    +

    You should see a similar output:

    +
     17 May 2022, 16:38:13: Hello GraalVM native image developer! 
      The PID of this process is: 57509
      Send it a signal: 'kill -SIGUSR1 57509' 
      to dump the heap into the working directory.
    @@ -429,11 +435,11 @@ 

    Create a Heap Dump f

    When the command completes, the svmheapdumpapi native executable is created in the current directory.

  • -

    Run the application and check the heap dump

    - -

    Now you can run your native executable and create a heap dump from it with output similar to the following:

    +

    Run the application and create a heap dump:

     ./svmheapdumpapi --heapdump
    - Sep 15, 2020, 4:06:36 PM: Hello GraalVM native image developer.
    +
    +

    You should see a similar output:

    +
     Sep 15, 2020, 4:06:36 PM: Hello GraalVM native image developer.
      Your command line options are: --heapdump
        Heap dump created /var/folders/hw/s9d78jts67gdc8cfyq5fjcdm0000gp/T/SVMHeapDump-6437252222863577987.hprof, size: 8051959
     
    diff --git a/jdk24/getting-started/oci/cloud-shell/index.html b/jdk24/getting-started/oci/cloud-shell/index.html index 6efe82d1bae0..1c32b9403216 100644 --- a/jdk24/getting-started/oci/cloud-shell/index.html +++ b/jdk24/getting-started/oci/cloud-shell/index.html @@ -20,7 +20,7 @@ - + diff --git a/jdk24/getting-started/oci/code-editor/index.html b/jdk24/getting-started/oci/code-editor/index.html index 0093368c8089..80a912963cf0 100644 --- a/jdk24/getting-started/oci/code-editor/index.html +++ b/jdk24/getting-started/oci/code-editor/index.html @@ -20,7 +20,7 @@ - + diff --git a/jdk24/getting-started/oci/compute-instance/index.html b/jdk24/getting-started/oci/compute-instance/index.html index df07e542ec7b..46d4e9a0d449 100644 --- a/jdk24/getting-started/oci/compute-instance/index.html +++ b/jdk24/getting-started/oci/compute-instance/index.html @@ -20,7 +20,7 @@ - + diff --git a/jdk24/getting-started/oci/devops-build-pipeline/index.html b/jdk24/getting-started/oci/devops-build-pipeline/index.html index fd75d2f4b268..36513f4c73a3 100644 --- a/jdk24/getting-started/oci/devops-build-pipeline/index.html +++ b/jdk24/getting-started/oci/devops-build-pipeline/index.html @@ -20,7 +20,7 @@ - + diff --git a/jdk24/getting-started/oci/index.html b/jdk24/getting-started/oci/index.html index b8e470060b23..cf33ab2d88ba 100644 --- a/jdk24/getting-started/oci/index.html +++ b/jdk24/getting-started/oci/index.html @@ -20,7 +20,7 @@ - + diff --git a/latest/getting-started/oci/cloud-shell/index.html b/latest/getting-started/oci/cloud-shell/index.html index 7f27caf9551e..ac6c10cad5bd 100644 --- a/latest/getting-started/oci/cloud-shell/index.html +++ b/latest/getting-started/oci/cloud-shell/index.html @@ -20,7 +20,7 @@ - + diff --git a/latest/getting-started/oci/code-editor/index.html b/latest/getting-started/oci/code-editor/index.html index 21f095f0655e..16ac67bb3e5f 100644 --- a/latest/getting-started/oci/code-editor/index.html +++ b/latest/getting-started/oci/code-editor/index.html @@ -20,7 +20,7 @@ - + @@ -182,7 +182,6 @@ diff --git a/latest/getting-started/oci/compute-instance/index.html b/latest/getting-started/oci/compute-instance/index.html index d6165007d296..c309b303b34f 100644 --- a/latest/getting-started/oci/compute-instance/index.html +++ b/latest/getting-started/oci/compute-instance/index.html @@ -20,7 +20,7 @@ - + diff --git a/latest/getting-started/oci/devops-build-pipeline/index.html b/latest/getting-started/oci/devops-build-pipeline/index.html index 61c1644ccebb..0fe32bf92d5b 100644 --- a/latest/getting-started/oci/devops-build-pipeline/index.html +++ b/latest/getting-started/oci/devops-build-pipeline/index.html @@ -20,7 +20,7 @@ - + diff --git a/latest/getting-started/oci/index.html b/latest/getting-started/oci/index.html index 043ddb83df9c..9c391ca131e7 100644 --- a/latest/getting-started/oci/index.html +++ b/latest/getting-started/oci/index.html @@ -20,7 +20,7 @@ - + diff --git a/latest/reference-manual/native-image/guides/containerise-native-executable-and-run-in-docker-container/index.html b/latest/reference-manual/native-image/guides/containerise-native-executable-and-run-in-docker-container/index.html index da130ff876d4..9f5071d0a974 100644 --- a/latest/reference-manual/native-image/guides/containerise-native-executable-and-run-in-docker-container/index.html +++ b/latest/reference-manual/native-image/guides/containerise-native-executable-and-run-in-docker-container/index.html @@ -160,7 +160,7 @@

    Containerize a

    Download a Sample Application

    -

    This guide uses the Spring Boot 3 Native Image Microservice example. +

    This guide uses the Spring Boot 3 Native Image Microservice example. The example is a minimal REST-based API application, built on top of Spring Boot 3. If you call the HTTP endpoint /jibber, it will return some nonsense verse generated in the style of the Jabberwocky poem, by Lewis Carroll.

    @@ -178,7 +178,7 @@

    Prerequisite

  • Change directory to native-image/containerize/: -
     cd graalvm-demos/native-image/containerize
    +    
     cd graalvm-demos/native-image/containerize/spring-boot-microservice-jibber
     
  • diff --git a/latest/reference-manual/native-image/guides/create-heap-dump/index.html b/latest/reference-manual/native-image/guides/create-heap-dump/index.html index ba895b9f01b9..1df9b2317ec1 100644 --- a/latest/reference-manual/native-image/guides/create-heap-dump/index.html +++ b/latest/reference-manual/native-image/guides/create-heap-dump/index.html @@ -184,7 +184,9 @@

    Create a Heap Dump on OutO For example:

    ./mem-leak-example -XX:+HeapDumpOnOutOfMemoryError
    -Dumping heap to svm-heapdump-67799-OOME.hprof ...
    +
    +

    You should see a similar output:

    +
    Dumping heap to svm-heapdump-67799-OOME.hprof ...
     Heap dump file created [10046752 bytes in 0.49 secs]
     Exception in thread "main" java.lang.OutOfMemoryError: Garbage-collected heap size exceeded.
     
    @@ -195,11 +197,13 @@

    Dump the Initial Heap of a This can be useful to identify which objects the Native Image build process allocated to the executable’s heap. For a HelloWorld example, use the option as follows:

    -
    $JAVA_HOME/bin/native-image HelloWorld --enable-monitoring=heapdump
    -./helloworld -XX:+DumpHeapAndExit
    -Heap dump created at '/path/to/helloworld.hprof'.
    +
    native-image HelloWorld --enable-monitoring=heapdump
    +
    +
    ./helloworld -XX:+DumpHeapAndExit
     
    +

    The heap dump is created at path/to/helloworld.hprof.

    +

    Create a Heap Dump with SIGUSR1 (Linux/macOS only)

    @@ -318,7 +322,9 @@

    Prerequisite

    Run the application:

     ./svmheapdump
    - 17 May 2022, 16:38:13: Hello GraalVM native image developer! 
    +
    +

    You should see a similar output:

    +
     17 May 2022, 16:38:13: Hello GraalVM native image developer! 
      The PID of this process is: 57509
      Send it a signal: 'kill -SIGUSR1 57509' 
      to dump the heap into the working directory.
    @@ -429,11 +435,11 @@ 

    Create a Heap Dump f

    When the command completes, the svmheapdumpapi native executable is created in the current directory.

  • -

    Run the application and check the heap dump

    - -

    Now you can run your native executable and create a heap dump from it with output similar to the following:

    +

    Run the application and create a heap dump:

     ./svmheapdumpapi --heapdump
    - Sep 15, 2020, 4:06:36 PM: Hello GraalVM native image developer.
    +
    +

    You should see a similar output:

    +
     Sep 15, 2020, 4:06:36 PM: Hello GraalVM native image developer.
      Your command line options are: --heapdump
        Heap dump created /var/folders/hw/s9d78jts67gdc8cfyq5fjcdm0000gp/T/SVMHeapDump-6437252222863577987.hprof, size: 8051959
     
    diff --git a/licensing-information/index.html b/licensing-information/index.html index f1f996da6352..7341fc5a0d00 100644 --- a/licensing-information/index.html +++ b/licensing-information/index.html @@ -20,7 +20,7 @@ - + diff --git a/reference-manual/graaljs/index.html b/reference-manual/graaljs/index.html index 3f66f93a7f21..ea9360de25c5 100644 --- a/reference-manual/graaljs/index.html +++ b/reference-manual/graaljs/index.html @@ -20,7 +20,7 @@ - + diff --git a/reference-manual/graalpy/index.html b/reference-manual/graalpy/index.html index d66a987700cf..6804c194ecac 100644 --- a/reference-manual/graalpy/index.html +++ b/reference-manual/graalpy/index.html @@ -20,7 +20,7 @@ - + diff --git a/reference-manual/graalwasm/index.html b/reference-manual/graalwasm/index.html index 2953d701f796..178955f1cba3 100644 --- a/reference-manual/graalwasm/index.html +++ b/reference-manual/graalwasm/index.html @@ -20,7 +20,7 @@ - + diff --git a/sitemap.xml b/sitemap.xml index f000c9730ad9..16d5e19a2040 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -875,139 +875,139 @@ https://www.graalvm.org/resources/articles/binsweep.pdf -2024-12-18T11:00:13+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/resources/img/brand-guidelines/downloads/GraalVM_logos_Style_Guide_v2_011022.pdf -2024-12-18T11:00:13+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/resources/img/brand-mascot/downloads/GraalVM%20mascot%20usage%20v1.2.pdf -2024-12-18T11:00:13+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/resources/lib/fiddle/data/SYSTEM_MODULES-java.desktop-javax.swing.text.html -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/resources/lib/fiddle/data/SYSTEM_MODULES-jdk.xml.dom-org.w3c.dom.html -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm-language-level-virtualization-oracle-tech-papers.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_april_2024.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_august_2020.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_august_2021.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_february_2022.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_january_2023.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_may_2020.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_may_2022.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_notes_february_2020.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_notes_february_2021.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_notes_may_2021.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_notes_november_2020.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/graalvm_project_advisory_board_meeting_notes_november_2021.pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/GraalPy_v1/quick-reference-graalpy-v1(eu_a4).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/GraalPy_v1/quick-reference-graalpy-v1(us-letter).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/GraalVM/graalvm-quick-ref-v1(eu_a4).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/GraalVM/graalvm-quick-ref-v1(us-letter).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image-graalvm-for-jdk17/Quick-reference-native-Image-JDK17(EU_A4).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image-graalvm-for-jdk17/Quick-reference-native-Image-JDK17(US-Letter).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image-graalvm-for-jdk21/Quick-reference-native-Image-JDK21(EU_A4).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image-graalvm-for-jdk21/Quick-reference-native-Image-JDK21(US-Letter).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image-graalvm-for-jdk23/native-image-quick-reference-graalvm-for-jdk23(eu_a4).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image-graalvm-for-jdk23/native-image-quick-reference-graalvm-for-jdk23(us-letter).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image_v1/quick-reference-native-image-v1(eu_a4).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image_v1/quick-reference-native-image-v1(us-letter).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image_v2/quick-reference-native-image-v2(eu_a4).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image_v2/quick-reference-native-image-v2(us-letter).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image_v3/quick-reference-native-image-v3(eu_a4).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/uploads/quick-references/Native-Image_v3/quick-reference-native-image-v3(us-letter).pdf -2024-12-18T11:00:14+00:00 +2024-12-19T16:01:53+00:00 https://www.graalvm.org/jdk23/graalvm-as-a-platform/language-implementation-framework/AOT/