RFR: 8240567: MethodTooLargeException thrown while creating a jlink image
Oliver Kopp
duke at openjdk.org
Mon Jun 12 05:47:43 UTC 2023
On Sun, 11 Jun 2023 21:01:54 GMT, Oliver Kopp <duke at openjdk.org> wrote:
> Fix for [JDK-8240567](https://bugs.openjdk.org/browse/JDK-8240567): "MethodTooLargeException thrown while creating a jlink image".
>
> Java still has a 64kb limit: A method may not be longer than 64kb. The idea of the fix is to split up the generated methods in several smaller methods
>
> This is a follow-up to https://github.com/openjdk/jdk/pull/10704. GitHub did not allow me to re-open the PR, because I did a force-push to have one commit.
TL;DR: summary of the changes
- In the other PR we missed that `dedupSetBuilder` requires local variables in the method for caching
- Code comments: `// Restore all (!) sets from parameter to local variables` and `// Store all new sets to List`
- In this PR, these variables are transferred from method to method by a `ArrayList`
- `0` is `this` when a method is called. `this` is needed to call the next helper method, thus we moved `BUILDER_VAR` to another place.
- Code comments: `MAX_LOCAL_VARS + 1; // we need 0 for "this"` and on `MAX_LOCAL_VARS`: `// Constant chosen for this generator, can be higher in practice`
> @koppor Is this ready for review?
Yes, it is! We especially checked it with our (rather large) desktop application.
> The other PR went through a dozens or so iterations before it was returned to draft.
I remember 😅. Therefore, we first had this as draft, waited for the "on-site checks" and then opened it.
> It seems like you were still battling with verifier errors.
We missed an important point and the other PR.
> The comment on this PR says you it was created because a force-push so I can't tell if you the changes are ready or not.
I am sorry for that. I weighted the requirement to have a single commit higher than reviewing the changes. The "excuse" for this decision is that nearly all code submitted back than has changed.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/14408#issuecomment-1586615579
More information about the core-libs-dev
mailing list