RFR: 8368333: [lworld] Add preview mode to ImageReader and JRT file-system [v7]
David Beaumont
duke at openjdk.org
Wed Oct 22 19:41:23 UTC 2025
On Tue, 21 Oct 2025 19:43:04 GMT, Roger Riggs <rriggs at openjdk.org> wrote:
>> David Beaumont has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 12 additional commits since the last revision:
>>
>> - Rolled up changes after rebase.
>>
>> * Removing package root flag based on feedback.
>> * Changing existing package flags during writing to match altered flag values.
>> * Feedback changes, and fixing some comments.
>> * Renaming slightly confusing "testEncoder" method.
>> * Fixing unit tests to use new constructor.
>> * Word smithing flags definitions.
>> * Add workaround until new image writing code is in
>> * Clarifying flag docs for /packages/xxx case
>> * Java ImageReader changes for preview mode
>> - Merge branch 'jdk_8366093_cpp/squashed' into jdk_8368333_java/squashed
>> - [[RESET BRANCH FOR MERGE]]
>> - Removing package root flag based on feedback.
>> - Changing existing package flags during writing to match altered flag values.
>> - Feedback changes, and fixing some comments.
>> - Test fixes and feedback changes.
>>
>> * Renaming slightly confusing "testEncoder" method.
>> * Fixing unit tests to use new constructor.
>> - Manually deleting ImageReaderFactory (it returned somehow)
>> - Word smithing flags definitions.
>> - Add workaround until new image writing code is in
>> - ... and 2 more: https://git.openjdk.org/valhalla/compare/802d18fe...9bbc26c1
>
> src/java.base/share/classes/jdk/internal/jimage/ImageReader.java line 282:
>
>> 280: // preview-only nodes. This is used to add preview-only content to
>> 281: // directories as they are completed.
>> 282: private final HashMap<String, Directory> previewDirectoriesToMerge;
>
> Can this be cleared or freed after the ImageReader is open. Its no longer needed.
It's used when directories are completed (as stated in the comment):
List<Node> previewOnlyNodes = getPreviewNodesToMerge(dir);
...
children.addAll(previewOnlyNodes);
> src/java.base/share/classes/jdk/internal/jimage/ImageStrings.java line 38:
>
>> 36: // String offset constants are useful for efficient classification
>> 37: // of location entries without string comparison. These may change
>> 38: // between jimage versions (they are checked during initialization).
>
> The checking seem only to be done when ImageStringsWriter is loaded/initialized.
> There may be a small risk that a mismatch of the image with the ImageStringsReader could occur.
> Can they be checked also by the reader?
Hmm, I don't see a nice way to do this at runtime since you can't lookup string offsets by their value (as far as I can see).
It's no more fragile than the old code (which had hard-coded constants for "class" and "" (and wasn't self-checking their validity). At least now it's tested at build time.
If the version number matches it should be safe. I'll add a comment about how changing existing entries is problematic.
> src/java.base/share/classes/jdk/internal/jimage/ModuleReference.java line 120:
>
>> 118: * under many modules, it only has content in one.
>> 119: */
>> 120: public boolean hasContent() {
>
> As suggested, `hasResoruces` would be consistent with the lookups for resources.
Will do.
-------------
PR Review Comment: https://git.openjdk.org/valhalla/pull/1619#discussion_r2453165416
PR Review Comment: https://git.openjdk.org/valhalla/pull/1619#discussion_r2453158966
PR Review Comment: https://git.openjdk.org/valhalla/pull/1619#discussion_r2453160430
More information about the valhalla-dev
mailing list