Skip to content

fix: Multiple jdtls LSPs eating memory in java monorepos#12123

Merged
rekram1-node merged 1 commit intoanomalyco:devfrom
stevoland:stevo/xzstmmoxottu
Mar 9, 2026
Merged

fix: Multiple jdtls LSPs eating memory in java monorepos#12123
rekram1-node merged 1 commit intoanomalyco:devfrom
stevoland:stevo/xzstmmoxottu

Conversation

@stevoland
Copy link
Contributor

What does this PR do?

In monorepos, starts jdtls at the project root* to let it discover and handle all submodules with a single process.

*Uses the project markers already used for kotlin-ls.

There's some complexity which I think is necessary to handle all cases - hopefully explained by the inline comments.

Fixes: #11368

How did you verify your code works?

Ran in gradle monorepo, reading files from multiple modules:

Before:

LSP
jdtls module-a
jdtls module-b
jdtls module-c

After:

LSP
jdtls

Made edits and got correct diagnostics in tool results.

Ran in single project repo, made edits

Thanks

@github-actions
Copy link
Contributor

github-actions bot commented Feb 4, 2026

The following comment was made by an LLM, it may be inaccurate:

No duplicate PRs found

@ChrisJamesHassell
Copy link

++ Can we get a stamp on this? I stopped using OpenCode entirely because of this bug.

@stevoland
Copy link
Contributor Author

Thanks @ChrisJamesHassell. Hard times round here :)

fwiw we fixed with a plugin that disables jdtls and reimplements.

It's part of a larger plugin but you'll get the idea. Just for our case where there's always a build.gradle at project root: https://gist.github.com/stevoland/f0f3c5ac12755e48db8459c8ff535cdd

@jiayaoO3O
Copy link

Is it possible to also construct a plugin for Maven multi-module projects?

@rekram1-node rekram1-node merged commit 42b2c4f into anomalyco:dev Mar 9, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

JDTLS spawns redundant per-module processes in Java monorepos, causing OOM

4 participants