Native Image Committer and Community Meeting 2026-03-26 #13201
Unanswered
wirthi
asked this question in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
List of all past and upcoming meetings: #3933
Note that we have the meeting at 17:00 CET; due to the US being on DST already, while the EU is not yet, the meeting time will be an hour later than usual for the US audience. https://www.timeanddate.com/worldclock/fixedtime.html?iso=20260326T09&p1=224
The meeting after this one is planned for April 30th, 2026. The meeting will typically be on the last Thursday of each month.
PRs listed below were closed between February 13th, 2026 and March 25th, 2026.
New and Noteworthy
Native Image Layers and Analysis improvements
[GR-53498] Enable Native Image Layers on macOS/aarch64 and Linux/aarch64 #13017 (thanks @emberian)
[GR-73556] Remove deprecated AutomaticFeature annotation #13037
[GR-73377] Add AnalysisAccessBase#rescanRoot(ResolvedJavaField, ScanReason). #12976
[GR-73441] Mark DynamicHub as reachable in initial layer #12998
[GR-73444] Decouple ImageSingletonsSupportImpl from HostedImageLayerBuildingSupport. #13020
[GR-73605] Check if ImageLayerBuildingSupport is installed before accessing it. #13040
[GR-73443] Improve Determinism of Native-Image Heap Object Discovery Order Across Builds #13065
[GR-73440] Pass HostedMetaAccess to objectInclusionReason #13067
[GR-73235] Annotate all builder singletons with @SingletonTraits #13114
[GR-72469] Use an object replacer for ValueLayout intrinsification. #13140
[GR-73995] Move AutomaticallyRegisteredImageSingleton and AutomaticallyRegisteredFeature to shared #13167
[GR-73551] Fix AnalysisError around ClassLoaderValue. #13191
Project Crema
[GR-71501] Ristretto deopt support. #13174
[GR-72848] Build libjvm NI with Ristretto support. #13124
[GR-71270] Implement InvokeGeneric for crema #13175
[GR-73644] Crema vtables disrespect -H:+RelativeCodePointers. #13049
[GR-73613] Improve documentation for crema. #13058
[GR-73508] [GR-73506] Crema: add support for runtime-loaded enums and fix method resolution for array types. #13081
[GR-73490] Crema: rework call-site linking and dispatching. #13120
[GR-73958] Store Crema class vtable length explicitly #13133
[GR-73848] Stabilize the Crema source-launcher threshold-0 path. #13148
[GR-73492] Widening the stored DynamicHub offset metadata for monitorOffset and identityHashOffset. #13168
[GR-70363] [GR-69095] Crema implementation of more java.lang.Class methods. #13176
[GR-74132] Allow ENUM$VALUES in shared empty array verification. #13186
[GR-73495] [GR-74181] Fix type checks for crema-loaded interfaces and array of interfaces. #13190
[GR-74241] Fix record component handling for interpreter metadata #13196
[GR-73974] Crema: Ensure Method and Field names are interned #13200
Project Terminus: Towards the "Hello, Espresso World!" Project Terminus: Self-hosting Native Image #12236
[GR-73219] Introduce the org.graalvm.nativeimage.shared module #12961
[GR-73969] Add Project Terminus Migration Guide #13136
[GR-73335] Move singleton traits to guest.staging. #12973
[GR-73392] Add concrete types to singleton trait system. #12978
[GR-72050] Refactor layer features for Terminus #12980
[GR-73413] Update singleton trait system. #12992
[GR-73324] Add Terminus Hello World Gate #12956
[GR-73326] Consolidated VMAccessHelper into GuestAccess (was GraalAccess) #12962
[GR-72791] Integrate runtime loaded classes in the module system. #12966
[GR-73038] Add static and mostly-static VM configurations #12971
[GR-73209] [GR-73162] Eagerly Merge Terminus-Related fixes from the Standalone Analysis PR #12979
[GR-73598] Move ImageSingletonsSupportImpl to shared. #13045
[GR-73294] Generate defaultHandler for each set of bytecode handlers #12995
[GR-73418] [GR-73419] Fix VMAccess and espresso exception issues. #13006
[GR-73218] Move ModuleSupport and ReflectionUtil into the shared module #13007
[GR-64589] Use floating code base reads for virtual dispatch outside deopt targets. #13009
[GR-73410] Update ObjectScanner#scanConstant and ObjectScanner.ReusableSet for Terminus #13013
[GR-73220] Add JVMCIReflectionUtil#writeField #13028
[GR-73478] Introduce VMAccess.writeArrayElement #13039
[GR-60072] Update libjvm definition. #13044
[GR-73557] Introduce GuestConfigurationValues #13047
[GR-73674] Install guest ImageSingleton registry. #13070
[GR-73653] Add @GuestFold annotation #13071
[GR-73296] Don't assume lookup will return a HostedInstanceClass. #13072
[GR-72652] Introduce
VMAccess.createCallback#13074[GR-73588] Introduce VMAccess#copyMemory #13076
[GR-73522] Handle VirtualThread being reachable with -H:-VMContinuations. #13084
[GR-70926] Pass method handle and isolate pointer as parameters to low-level upcall stub. #13105
[GR-73833] Ristretto: harden branch profile probability against racy snapshots. #13127
[GR-72997] Ristretto: expand runtime graph builder plugin coverage. #13143
[GR-72636] Move guest code out of ImageClassLoader into GuestTypes #13153
[GR-63186] [GR-69096] [GR-73487] Implement annotations for runtime-loaded types #13165
[GR-73223] Migrate JDKInitializationFeature to Terminus #13166
[GR-73707] Add bytecode transition tracing; Add frame-state preservation intrinsic; Optimize deoptimization performance. #13170
[GR-72063] Integrate ClassForNameSupport into ReflectionDataBuilder #13187
[GR-73545] Don't register guest options natively in the builder #13198
[GR-73545] [GR-73654] Move HostedOptionKey to shared #13066
[GR-73824] Move MethodVariant back to common #13092
[GR-73778] Move SubstrateUtil to shared #13107
[GR-73594] Implement @GuaranteeFolded for methods and use it for ImageSingletons #13062
[GR-73361] Move VMError into the shared module #12987
Streamline reachability metadata
[GR-73319] Integrate unsafe allocation registration in ReflectionDataBuilder #12999
Fix resource bundle registration for java.xml.crypto TransformService #12949
[GR-70783] Fix issues stemming from the reflection overhaul #13077
Fix native-image metadata docs and schema links #13158
Fix native-image metadata docs and schema links #13159
[GR-74174] Fix missing reflection registration for ICU4J. #13192
Usability
[GR-71974] Compatibility Mode for Native Image. #12756
[GR-71072] Expand --future-defaults options #12985
[GR-73281] [GR-73404] Avoid redundant --add-modules arguments getting passed to the builder. #12989
[GR-73481] Ensure java.se module does not participate in modulePathRequiredModules. #13011
[GR-59090] Throw a clear error message when a security provider was not found at runtime. #13180
[GR-72676] Flag ReportUsedMetadataFiles to print all parsed metadata files. #13004
Monitoring / Tooling / Debugging
[GR-44474] Windows Debug Information for local variables - prerequisite record definitions. #13131 (RedHat/IBM)
[GR-72496] Add uncaught exception handler to threads started by Stressor. #12990
[GR-44474] Windows Debug Information for local variables - prerequisite record definitions #5638
Garbage Collector / Memory Management
[GR-73477] [GR-73513] Add support for walking the thread list, while not at a safepoint. #13043
[GR-69295] Ensure that code base is determined after initializing heap base. #12991
[GR-73483] Deferred CGlobalData #13030
[GR-73482] Split THREAD_MUTEX into SAFEPOINT_MUTEX and THREAD_MUTEX. #13033
[GR-73817] Don't execute recurring callbacks while holding the thread mutex. #13075
[GR-73469] Allow Different Storage Types for Interned Strings #13082
[GR-71279] Sweep chunks with pinned objects in copying collections. #13088
[GR-73884] Fix a race condition in ThreadStatusTransition.fromNativeToJava(). #13113
[GR-73904] Simplify isolate initialization. #13130
[GR-74008] Use
memory_pressurefor free memory on macOS. #13141Other & fixes
[GR-71128] Expose argc and argv in graal_create_isolate_params_t. #12964
[GR-2617] Replace/remove calls to C functions that are not thread-safe or considered unsafe. #12977
[GR-66590] Fix
JVM_UnloadLibraryunloading libraries unconditionally #12981[GR-72993] Fix regression due to fixed register in SubstrateVM AMD64 indirect call #12983
[GR-73432] Check for uninitialized values in ContinuationsFeature. #12994
[GR-73503] Make SerializationSupport.constructorAccessors use DynamicHub id instead of Class Object as key #13008
[GR-36088] Fix multiple JCK tests related to resource bundles. #13063
[GR-72469] Use registerObjectReachabilityHandler instead of an object replacer where possible. #13126
[GR-73819] Fixes and better verification for @Uninterruptible code. #13129
[GR-73496] Use 'resolvedTypeAt' instead of 'resolveClassConstant'. #13137
[GR-73396] Move @Uninterruptible and @AlwaysInline annotations to the shared module #13144
[GR-74017] Use VMCondition names more consistently. #13147
[GR-74019] Fix problem with Uninterruptible. #13149
[GR-71087] Remove -H:LocalizationOptimizedMode. #13057
[GR-73628] Explicitly mention in docs that statically linking against glibc is not supported. #13061
[GR-73743] Update JNI in Native Image doc. #13068
[GR-73879] JVMCIVersionCheck error message explains how to install a compatible JDK #13122
[GR-74011] Use argfile for native-image invocations on Windows. #13146
[GR-73894] Omit statically required modules from the native image builder module path. #13155
[GR-66493] Reduce time spent looking up options. Simplify option implementation. #13163
[GR-72713] Add warning print limit to avoid excessive printing in ConfigureTool.TraceProcessor. #12988
Questions
GraalVM Deep Dives: Peter Hofer: Compacting Old Gen and other news on the Serial GC
#12913: [GR-52538] [GR-69523] [GR-73129] New GC policy and enable CompactingOldGen by default.
#13088: [GR-71279] Sweep chunks with pinned objects in copying collections.
CompactingOldGen.Adaptive2collection policy as default to better fit mark-compact collection.CompactingOldGenBefore this change, a full GC collected the old generation by copying. This requires extra memory, up to 2x the current heap size (and in extreme cases 2x the maximum heap size).
CompactingOldGenuses marking and in-place compaction for full collections as follows:One detail worth noting is that move information is stored in gaps between sequences of live objects, rather than in object headers or side tables. This avoids using extra memory, but requires a separate planning and fixup pass. It also means that when we need an object's new location, we need to identify the object sequence it is part of and find its move information. We temporarily build a lookup table for that in the card table memory.
Code point of interest: https://github.com/oracle/graal/blob/master/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/CompactingOldGeneration.java
Adaptive2collection policyBecause the previous default collection policy did not fit
CompactingOldGenas well, we also introduced a new default policy:Adaptive2. It is less complex and avoids some erratic behaviors we saw with the previous policy.Most importantly, its inputs are:
At a high level,
Adaptive2does three important things:The policy is based on HotSpot's ParallelGC policy (also recently re-engineered) with different parameters, most importantly:
GC_TIME_RATIO = 1:this corresponds to a throughput goal of 50%, which is intentionally low. (SerialGC is single-threaded, so it cannot reach very high throughput goals for highly multi-threaded applications.)
MIN_GC_DISTANCE_SECOND = 0.020:once the throughput goal above is met, this gives the application enough time to run and to avoid too much overhead from frequent collections.
Code point of interest: https://github.com/oracle/graal/blob/master/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/AdaptiveCollectionPolicy2.java
Benchmark results with
CompactingOldGenandAdaptive2From the benchmark runs used for this change, on Community Edition:
Falling back to the previous behavior
Minor regressions are difficult to avoid with a change in behavior like this, but please let us know if you encounter a serious regression.
Copying collections with the old policy can be restored with:
Pinning improvements in copying collections
The heap consists of fixed-size chunks. If a chunk contains a pinned object, that restricts how the collector can collect the chunk.
Previously, copying collections effectively treated chunks with pinned objects as if all their objects were alive and pinned. This could also keep objects in other chunks alive.
Full collections with
CompactingOldGenhandle such chunks better by marking live objects in them and sweeping the chunk.We applied the same idea to copying collections, so that unpinned live objects are copied out and the chunk is then swept so that only pinned objects remain. This also applies to young generation collections with
CompactingOldGen.Code point of interest: https://github.com/oracle/graal/blob/master/substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/SweepAndPromotePinnedChunkVisitor.java
Beta Was this translation helpful? Give feedback.
All reactions