Native Image Committer and Community Meeting 2026-01-29 #12879
-
|
List of all past and upcoming meetings: #3933 The meeting after this one is planned for February 26th, 2026. The meeting will typically be on the last Thursday of each month. New and Noteworthy
Questions@wirthi we intend to stop publishing (for future releases) https://mvnrepository.com/artifact/org.graalvm.nativeimage/svm (which is implementation details), everything relevant for your usecases should be (or needs to be) in in the public API https://mvnrepository.com/artifact/org.graalvm.sdk/nativeimage - who is still depending on the internals? Is anything missing in the API that is blocking you from moving? See #12738 Deep Dive: @olpaw on AOT-compiled Crema-based Java launcherFrom "JDWP Support for NI" to "Crema-based LIBJVM"To improve our NI debugging experience we implemented JDWP Support for NISupporting JDWP protocol needs a bytecode interpreter. Taking the core interpreter part of Espresso was the obvious choice.
Project Crema (reuse the bytecode interpreter to allow runtime-classloading in NI)Certain features of the JDK are implemented by generating bytecodes at runtime (Proxy classes, XSLT, method handles, serialization, ...). To fully support those aspects of the JDK we need runtime-classloading.
Espresso vs. CremaEspresso provides an isolated JVM implementation on top of a VM runtime. Crema on the other hand allows dynamically loaded code to link with classes/fields/methods of the underlying VM. The delegation-based class loader hierarchy allows Crema to resolve against AOT compiled classes.
what if? 🦖Native image allows us to
This is exactly what is used by the The The VM instance knows about the classpath from system property And indeed it does (with #12689): From
|
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
|
To follow up on @simonis question, by making URLClassPath ucp = new URLClassPath(cp, false);
if (archivedClassLoaders != null) {
APP_LOADER = (AppClassLoader) archivedClassLoaders.appLoader();
setArchivedServicesCatalog(APP_LOADER);
APP_LOADER.setClassPath(ucp);
} else { /* unreachable */ }and this is how the NI built-in |
Beta Was this translation helpful? Give feedback.




To follow up on @simonis question, by making
jdk.internal.loader.ClassLoaders,initialize-at-run-time, its static initializer at image-runtime executes https://github.com/openjdk/jdk/blob/847b5166ea6322f9ff3effa62ed6d1e73a8b1122/src/java.base/share/classes/jdk/internal/loader/ClassLoaders.java#L94and this is how the NI built-in
APP_LOADERinstance actualizes its classpath with what is coming from the java-launcher.