Skip to content

ParameterInfoImpl: build the fully qualified name once, intern and keep it - #163

Merged
bnaudts merged 1 commit into
develfrom
fix/parameter-fqn-built-once
Oct 21, 2026
Merged

bnaudts merged 1 commit into
develfrom
fix/parameter-fqn-built-once

Conversation

@tomtourwe

@tomtourwe tomtourwe commented Oct 21, 2026 •

Copy link
Copy Markdown

What this changes, and why

ParameterInfoImpl.fullyQualifiedName() built a new string on every call: the method's fully qualified name, the parameter's index and its name. On a method with a long parameter list, that string is a few kilobytes, and the analysis keeps it per statement that refers to the parameter. On a large codebase after a refactoring that added long parameter lists, one parse held 14 GB of byte[] in these strings and ran out of memory. With this change, the parse of the same code holds 1.2 GB of byte[].

The name is now built once and kept, in a field marked @IgnoreModifications, the same way as other memoised values in the info classes. It is only kept once the method has been inspected (methodInfo.hasBeenInspected()), because before that the method's name, and so the parameter's, can still change. The kept string is interned, so equal parameter names share one string.

…is committed, interned and shared

Signed-off-by: Tom Tourwe <Tom.Tourwe@codelaser.io>
@bnaudts
bnaudts merged commit b4ace69 into devel Oct 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants