Skip to content

Releases: xjoker/delamain

v20260722.3

Choose a tag to compare

@github-actions github-actions released this 22 Jul 08:26
20260722.3: fix cold-warmup worker collapse caused by the smaller heap

20260722.2 derived the jadx heap from the container (49 GB -> 9.8 GB on
production). computeWarmupWorkers sizes Phase-1 parallelism from that heap, and
its base-footprint constant still assumed the heap-resident trigram index:

  base = 1024 + 222779/1000 * 80 = 18784 MB  >  9832 MB heap
  -> usable < 0 -> byHeap = 1 -> ONE decompile worker for ~220k classes

Production never hit it (it FAST_RESTOREs from the persisted index volume and
skips Phase-1 entirely), but a newly loaded APK, or anyone pulling the published
image, would cold-warm single-threaded.

Recalibrated against measurement instead of the old era's guesswork:
* base 80 MB/1k -> 20 MB/1k. Production /memory-diagnostics reports a clean
  post-GC steady state of 4466 MB for 237931 classes (~19 MB/1k); the content
  index now lives in an mmap'd shard on disk and Phase-1 writes through to the
  CodeStore before unloading.
* per-worker 1536 MB -> 384 MB (MemoryConfig.DEFAULT_PER_WORKER_HEAP_MB). The
  1.5 GB figure was paying for in-heap trigram growth during Phase-1, which no
  longer happens; a worker now holds one class's decompile working set. Still
  hot-updatable via POST /memory-config, with isHighMemoryPressure as the net.
* Added the CPU dimension the formula never had: max(2, cores/4) instead of
  cores-2. Warmup runs while the server answers queries, jadx parallelises
  internally on top of these workers, and the host is shared -- authorising 46
  workers on a 48-core box is what made a cold warmup saturate the machine.
  DELAMAIN_WARMUP_DECOMPILE_WORKERS still overrides for a known-idle machine.

Net on the production shape (222779 classes, 9832 MB heap, 48 cores): 1 -> 6
workers, capped at 12 by the CPU term.

computeWarmupWorkers is now a pure function of (classCount, heapMB, cores,
safetyMargin, perWorkerHeapMB) so the sizing is directly testable; 6 new tests
pin the regression, the base against the measured steady state, the CPU cap, and
the small-machine floors.

Tests: 170 Java (only the pre-existing order-dependent
ClassCacheManagerInvalidateCodeStoreTest failure), 82 gateway.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

v20260721.4

Choose a tag to compare

@github-actions github-actions released this 21 Jul 15:36
delamain 20260721.4

v20260721.3

Choose a tag to compare

@github-actions github-actions released this 21 Jul 14:49
delamain 20260721.3

v20260721.2

Choose a tag to compare

@github-actions github-actions released this 21 Jul 14:27
delamain 20260721.2