RFR: 8240567: MethodTooLargeException thrown while creating a jlink image [v12]
Oliver Kopp
duke at openjdk.org
Mon Jul 3 21:11:03 UTC 2023
On Mon, 3 Jul 2023 20:00:40 GMT, Mandy Chung <mchung at openjdk.org> wrote:
>> Oliver Kopp has updated the pull request incrementally with two additional commits since the last revision:
>>
>> - Fix test
>> - Fix ArrayList initialization and off-by-one errors
>
> src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/SystemModulesPlugin.java line 543:
>
>> 541: private static final int MAX_LOCAL_VARS = 256;
>> 542:
>> 543: private final int BUILDER_VAR = MAX_LOCAL_VARS + 1;
>
> why this one can't use the next available local variables? i.e. if no splitting, 1 is the next available slot (btw it looks like using 0 in the current implementation is a bug because this is an instance method). If module descriptors are done in multiple helper methods, 3 is the next available slot.
I tried that multiple times and always failed. With following hack, I "debugged" the value of nextLocalVar at the beginning of the split:
Files.writeString(Path.of("C:\\temp\\test.log"), "nextlocavar" + nextLocalVar, StandardOpenOption.CREATE, StandardOpenOption.APPEND);
The values are always 4. I did not dare to overwrite these "magic" slots 1, 2, 3. Despite using IntelliJ's call hierarchy feature, I could not find out where in the code this happens or for what reasons.
I moved `BUILDER_VAR` and `DEDUP_LIST_VAR` two "away".
I think, using `0` was "intentional", because `this` was not needed in the method and thus, this slot could be reused.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/14408#discussion_r1251281097
More information about the core-libs-dev
mailing list