On Fri, 5 Jun 2026 12:45:22 GMT, Casper Norrbin <[email protected]> wrote:

>> Hi everyone,
>> 
>> This change removes the remaining mandatory preloading path for 
>> null-restricted instance fields when loading classes from CDS. 
>> [JDK-8380053](https://bugs.openjdk.org/browse/JDK-8380053) already changed 
>> normal class loading so null-restricted field types are no longer loaded 
>> just because the field is null-restriced. Instead, the preloading is 
>> speculative and driven by the `LoadableDescriptor` attribute. The CDS path 
>> still had the older special case in 
>> `SystemDictionary::preload_from_null_free_field`, which could force loading 
>> of null-restricted field types.
>> 
>> This fix removes that CDS-only preload helper and routes non-static field 
>> signatures through the existing `LoadableDescriptor` path instead. This 
>> makes loading follow the same model as in 
>> `ClassFileParser::fetch_field_classes()` with speculative loading.
>> 
>> Testing:
>> - Tier 1-3
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Casper Norrbin has updated the pull request with a new target base due to a 
> merge or a rebase. The pull request now contains seven commits:
> 
>  - static null-restricted check, new test, other feedback
>  - Merge branch 'lworld' into systemdict-nullrestricted-loading
>  - create symbol only when logging
>  - Merge branch 'lworld' into systemdict-nullrestricted-loading
>  - Validate archived inline field dependencies without LoadableDescriptors
>  - re-add failed marker
>  - removed forced loading for nullrestricted

Changes requested by iklam (Committer).

src/hotspot/share/classfile/systemDictionary.cpp line 1148:

> 1146: }
> 1147: 
> 1148: // Tries to pre-load classes referred to in non-static instance fields 
> if they are found in the

Comment should be updated to indicate that this is optional. If a failure is 
encountered, it's silently ignored.
Could you add a reference to the same code that happens when a class is loaded 
outside of archive?

src/hotspot/share/classfile/systemDictionary.cpp line 1203:

> 1201:   if (ik->has_inlined_fields() || 
> ik->has_null_restricted_static_fields()) {
> 1202:     for (AllFieldStream fs(ik); !fs.done(); fs.next()) {
> 1203:       if (fs.access_flags().is_static() && 
> !fs.is_null_free_inline_type()) continue;

`if` body should be in braces to be consistent with the style used below:


if (...) {
  continue;
}

-------------

PR Review: 
https://git.openjdk.org/valhalla/pull/2409#pullrequestreview-4438768417
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2409#discussion_r3364736459
PR Review Comment: 
https://git.openjdk.org/valhalla/pull/2409#discussion_r3364725030

Reply via email to