Skip to content

Builds of large DDK-based workspaces are slower and retain more memory since #1405 #1545

Description

@joaodinissf

Since #1405 turned Scope and Export into Xbase / JvmModelInferrer languages, Eclipse builds of large DDK-based workspaces allocate much more, keep more memory alive, and do more work after git branch switches. In a long IDE session this compounds into GC pressure, and the effect seems strongest on Windows with Microsoft Defender scanning every file the builders write.

Measurements

These are headless Eclipse runs on a synthetic downstream-shaped workspace (L: 98 projects, 59 .scope, 59 .export, 939 .xtend), with the stock Xtext builder, alternating git checkout between two branches that differ only in Java/Xtend files. There are 2 runs per variant on macOS. Wall times were too noisy on that machine to quote, so the table shows counters and memory.

1e0a5c8 (2026-06-29) v19.2.0 master + fixes below
full build: allocated 50.5 GB 75.2 GB (+49%) 61.2 GB
full build: live set afterwards 402 MB 634 MB 398 MB
per branch switch: allocated 6.1 GB 6.8 GB 6.1 GB
per branch switch: .export re-processed 0 2 0
live-set growth per switch (20 switches, M workload) 0.3 MB 7.9 MB 0.3 MB

Causes found and fixes (draft PRs)

  • A thread-local leak in ExportJvmModelInferrer keeps the last export resource's whole builder resource set alive. Fixed in the R12 PR.
  • Scope/Export generation rebuilds an all-EPackages type resolver per expression, a project class loader per method body, and uncached genmodel lookups. Fixed in the Tier A PR, with byte-identical output.
  • Java-only changes re-queue and regenerate .export files, because Xbase records the EMF interfaces as imported names. Fixed in the R1 PR, which is for discussion.
  • What remains after these fixes is about +20% full-build allocation. That is the inherent cost of Scope/Export being full Xbase languages. Whether they need to be is a separate design question.

A before/after measurement of each PR on the affected Windows machine is in progress. The PRs stay drafts until it is in.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LgVRfQCTxSDwGrN8J5s6fd

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions