[lworld] RFR: 8366093: [lworld] Add preview mode to C++ classloader

David Beaumont duke at openjdk.org
Wed Oct 8 11:46:44 UTC 2025


On Mon, 29 Sep 2025 14:43:23 GMT, Roger Riggs <rriggs at openjdk.org> wrote:

>> src/java.base/share/native/libjimage/imageFile.hpp line 259:
>> 
>>> 257:         // it exists in the same module.
>>> 258:         FLAGS_IS_PREVIEW_ONLY = 0x4
>>> 259:     };
>> 
>> A refactoring of the flags can avoid conflicting states.
>> FLAGS_IS_PREVIEW_VERSION = 2;   // set for preview version
>> FLAGS_NO_NORMAL_VERSION = 1;    // preserving the zero value for normal and no preview.
>> 
>> Create static methods in ImageLocation to perform the desired tests on flags.
>> The utility methods make the code easier to read.
>> Also define macros/function in the native code in ImageFile and jimage.
>> 
>> isPreviewVersion(flags) { return (flags & FLAGS_IS_PREVIEW_VERSION) != 0)}
>> isPreviewOnly(flags) { return (flags & FLAGS_IS_REVIEW_VERSION | FLAGS_NO_NORMAL_VERSION) == FLAGS_NO_NORMAL_VERSION}
>
> Reprise:
> 
> Your name FLAGS_IS_PREVIEW_ONLY probably better than FLAGS_NO_NORMAL_VERSION and has the same semantics.
> 
> FLAGS_HAS_PREVIEW_VERSION means that there is a preview version and it will be found in the <META-INF/Preview> hierarchy. if the flag is in the preview node then this is it. If found in the normal hierarchy, the preview class is found in the <META-INF/Preview> hierarchy.

The FLAGS_HAS_PREVIEW_VERSION flag is only set on non-preview locations. It's what indicates that you may need to look for a preview version in preview mode (rare but possible).

For C++ I think this occasional 2nd hash calculation and lookup shouldn't be an issue because it's for class loading, so each successful lookup triggers a lot of additional work (and as I understand it, failed lookups should not be common in this code -- as opposed to the JRT file system code).

There are several possible approaches to address this is it does turn out to be a performance issue though.

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

PR Review Comment: https://git.openjdk.org/valhalla/pull/1618#discussion_r2413582640


More information about the valhalla-dev mailing list