Skip to content

perf(references): компактное хранение обращений + пакетная запись (−375 МиБ)#4272

Merged
nixel2007 merged 1 commit into
developfrom
perf/symbol-occurrence-compact
Jul 15, 2026
Merged

perf(references): компактное хранение обращений + пакетная запись (−375 МиБ)#4272
nixel2007 merged 1 commit into
developfrom
perf/symbol-occurrence-compact

Conversation

@nixel2007

@nixel2007 nixel2007 commented Jul 14, 2026

Copy link
Copy Markdown
Member

Проблема

SymbolOccurrenceRepository хранил обращения как Map<Symbol, ConcurrentSkipListSet<SymbolOccurrence>> — по одному ConcurrentSkipListSet на символ. Это самая расточительная по памяти коллекция JDK (заголовок ConcurrentSkipListMap 88Б + sentinel- и index-узлы на каждый элемент). На cpm (~13k модулей, 5.98M обращений, 1.45M символов) — ~627 МиБ накладных расходов контейнеров.

Решение

Map<Symbol, Object>: сам SymbolOccurrence для символа с одним обращением (доминирующий случай), иначе отсортированный SymbolOccurrence[]. Никаких скип-листов и порогов.

Проблема массива — вставка копированием O(n), а накопление обращений символа по одному давало бы O(n²) на «хабах». Решается пакетной записью на документ: ReferenceIndex.replaceReferences группирует новые вхождения по символу и зовёт saveAll, который сливает пачку с массивом за одно копирование (галопирующий merge O(n+k)), а не копирует массив на каждое вхождение. BatchingSink уже собирает пачку документа — так что это бесплатно.

getAllBySymbol возвращает Collection — представление без копирования (чтение горячее: вывод типов ExpressionTypeInferencer, диагностики).

Память и время на cpm — прямой замер

populateContext по cpm обеими сборками (единственное отличие — хранилище символьной стороны), retained heap после GC:

сборка retained heap время populateContext
develop (ConcurrentSkipListSet) 2322 МиБ ~117 с
этот PR (массивы + пакетная запись) 1947 МиБ ~117 с

Память: −375 МиБ реального heap. Время построения индекса — одинаковое: фаза упирается в парсинг 13k файлов (ANTLR), а запись reference-индекса — доли процента. Цель PR — память; по времени построения индекса не хуже.

(Разбор классов-контейнеров дампа даёт ~−546 МиБ, но это HPROF-shallow — ссылки по 8 Б; реальный heap с compressed oops — 4 Б, отсюда ~375.)

Почему массивы не медленнее скип-листа на записи

Массив вставляется копированием O(n), и накопление по одному дало бы O(n²) на «хабах». Держит время пакетная запись: saveAll сливает все обращения символа из документа за одно копирование. Фактическая работа копирования на реальных пачках cpm (инструментированный прогон; средний размер пачки symbol-in-document = 3.56, 87% обращений — пачками ≥2):

путь записи символьной стороны копирований массивов на cpm
одиночный save (по одному) 3 644 021 601
пакетный saveAll (этот PR) 257 739 922 (в 14× меньше)

14× (а не ×3.56) потому, что выигрыш взвешен работой: хабы ссылаются из немногих документов (FK), и батч за документ схлопывает O(K²) в O(K·F). Слияние — галопирующий merge (binarySearch позиции + arraycopy участков), быстрый путь без stream для пачки из одного. deleteAll тоже батчит по символу — симметрично saveAll.

Тесты

Прямой SymbolOccurrenceRepositoryTest (single / массив / крупная коллекция / saveAll слияние-дедуп / удаление со схлопыванием) + ReferenceIndexTest + LocationRepositoryTest — 47/47 зелёные. Порядок getReferencesTo сохранён.

replaceReferences

Стоит поверх уже влитого #4271: replaceReferences теперь объединяет обе стороны — группировку по символу → saveAll (символьная сторона, этот PR) и replaceOccurrences (сторона расположений, #4271). Конфликтов с develop нет.

🤖 Generated with Claude Code

https://claude.ai/code/session_017AZeyPcsbdUBaLUGWbhrCi

Summary by CodeRabbit

  • New Features

    • Added efficient bulk saving of symbol occurrences.
    • Symbol occurrence results are returned in sorted order with duplicate entries removed.
    • Bulk deletion now supports removing multiple occurrences at once.
  • Bug Fixes

    • Improved handling of large occurrence collections.
    • Preserved correct results when adding or removing partial sets of occurrences.
    • Prevented duplicate reference entries during index updates.
  • Tests

    • Added comprehensive coverage for insertion, bulk operations, ordering, deduplication, and deletion.

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: cdeb01b2-8913-48c7-b5db-45eb7e1f2a8f

📥 Commits

Reviewing files that changed from the base of the PR and between 4f3a4eb and c11c62f.

📒 Files selected for processing (3)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java

📝 Walkthrough

Walkthrough

SymbolOccurrenceRepository now stores per-symbol occurrences as singletons or sorted arrays, with atomic insert/delete operations and batch writes. ReferenceIndex groups new occurrences by symbol before persistence. Tests cover ordering, deduplication, large collections, batch merging, and deletion.

Changes

Symbol occurrence storage

Layer / File(s) Summary
Storage representation and access
src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java
The repository stores singleton or sorted-array values, returns immutable Collection views, and accepts collection inputs for deletion.
Insertion and removal transitions
src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java
save(...) and saveAll(...) atomically preserve sorted uniqueness; deletion shrinks arrays and removes empty mappings.
Reference update batching
src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java
replaceReferences groups non-stale occurrences by symbol and persists each group with saveAll(...), while retaining stale deletion and location replacement.
Repository behavior tests
src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java
Tests cover sorting, deduplication, batch writes, large collections, partial deletion, and complete removal.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ReferenceIndex
  participant SymbolOccurrenceRepository
  participant LocationRepository
  ReferenceIndex->>ReferenceIndex: group non-stale occurrences by Symbol
  ReferenceIndex->>SymbolOccurrenceRepository: saveAll(Symbol, occurrences)
  ReferenceIndex->>SymbolOccurrenceRepository: deleteAll(stale occurrences)
  ReferenceIndex->>LocationRepository: replaceOccurrences(uri, replacement)
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 22.22% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: compact reference storage and batch writes for performance, including the reported memory savings.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch perf/symbol-occurrence-compact

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java (1)

119-180: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add unit tests for the transition boundaries.

insert/remove implement fairly intricate representation transitions (dedup by compareTo, 2-element array creation, exact MAX_ARRAY_SIZE promotion to ConcurrentSkipListSet, 2-element collapse back to singleton, shrink-to-null). Logic traced through and appears correct at all these boundaries, but no dedicated test file for SymbolOccurrenceRepository is included in this change to lock in that behavior. As per coding guidelines, changes under **/*.java should "maintain or improve test coverage using appropriate test frameworks (JUnit, AssertJ, Mockito)" — this correctness-critical, low-level logic is a good candidate for direct unit tests (e.g. singleton↔2-array, array at MAX_ARRAY_SIZE-1MAX_ARRAY_SIZE, MAX_ARRAY_SIZE→skip-list promotion, duplicate insert/removal, remove-of-absent-element no-ops).

Want me to draft a SymbolOccurrenceRepositoryTest covering these boundary cases?

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java`
around lines 119 - 180, Add a dedicated JUnit/AssertJ test class for
SymbolOccurrenceRepository covering insert/remove representation transitions:
singleton to two-element array, array growth through MAX_ARRAY_SIZE to
ConcurrentSkipListSet promotion, duplicate insertion, two-element collapse to
singleton, shrink-to-null, and removal of absent occurrences as no-ops. Exercise
the repository’s public API while asserting both contents and resulting behavior
at each boundary.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java`:
- Around line 66-69: Update the class Javadoc around getAllBySymbol to
distinguish the immutable singleton/array copy-on-write paths from the
ConcurrentSkipListSet path, which exposes a live weakly consistent view during
concurrent save or deleteAll operations. Remove the claim that readers always
observe a consistent snapshot and document the accurate behavior for each
representation.

---

Nitpick comments:
In
`@src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java`:
- Around line 119-180: Add a dedicated JUnit/AssertJ test class for
SymbolOccurrenceRepository covering insert/remove representation transitions:
singleton to two-element array, array growth through MAX_ARRAY_SIZE to
ConcurrentSkipListSet promotion, duplicate insertion, two-element collapse to
singleton, shrink-to-null, and removal of absent occurrences as no-ops. Exercise
the repository’s public API while asserting both contents and resulting behavior
at each boundary.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 1dc383c4-6d1b-402a-952e-4b58fc859942

📥 Commits

Reviewing files that changed from the base of the PR and between 316ff75 and a9a0d08.

📒 Files selected for processing (1)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Test Results

 3 642 files  + 6   3 642 suites  +6   1h 51m 29s ⏱️ + 5m 35s
 3 608 tests +14   3 590 ✅ +14   18 💤 ±0  0 ❌ ±0 
21 648 runs  +84  21 536 ✅ +84  112 💤 ±0  0 ❌ ±0 

Results for commit 4f3a4eb. ± Comparison against base commit 6419ab1.

♻️ This comment has been updated with latest results.

@nixel2007
nixel2007 force-pushed the perf/symbol-occurrence-compact branch from a9a0d08 to 04e9820 Compare July 14, 2026 20:21

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java (1)

91-102: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add coverage for concurrent saves across representation transitions.

The suite only exercises sequential writes, so regressions in the new per-key atomic-update guarantee could pass unnoticed. Add concurrent saves for one symbol and assert complete, unique, sorted results after crossing the array-to-HubSet threshold.

As per coding guidelines, “maintain or improve test coverage using appropriate test frameworks.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java`
around lines 91 - 102, Add a concurrent-save test alongside
convertsToSkipListAboveThresholdAndKeepsAllOccurrences that writes many distinct
occurrences for the same SYMBOL from multiple threads, crossing MAX_ARRAY_SIZE,
then verifies getAllBySymbol returns the complete set exactly once in sorted
order. Use the project’s existing concurrency/test utilities and ensure all save
tasks finish before asserting the results.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In
`@src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java`:
- Around line 91-102: Add a concurrent-save test alongside
convertsToSkipListAboveThresholdAndKeepsAllOccurrences that writes many distinct
occurrences for the same SYMBOL from multiple threads, crossing MAX_ARRAY_SIZE,
then verifies getAllBySymbol returns the complete set exactly once in sorted
order. Use the project’s existing concurrency/test utilities and ensure all save
tasks finish before asserting the results.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b0bd0d91-d53b-4cc4-92cf-a40552aa1673

📥 Commits

Reviewing files that changed from the base of the PR and between a9a0d08 and 04e9820.

📒 Files selected for processing (2)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java

@nixel2007
nixel2007 force-pushed the perf/symbol-occurrence-compact branch from 04e9820 to 5d60697 Compare July 15, 2026 08:11
@nixel2007 nixel2007 changed the title perf(references): компактное хранение обращений в SymbolOccurrenceRepository (−~500 МиБ) perf(references): компактное хранение обращений + пакетная запись (−565 МиБ, копирований в 14× меньше) Jul 15, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java (1)

158-158: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Import ArrayList instead of using the fully qualified name.

Multiple lines use the fully qualified java.util.ArrayList class name. To improve readability, consider adding import java.util.ArrayList; at the top of the file and using the simple name ArrayList instead.

  • src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java#L158-L158: Replace new java.util.ArrayList<SymbolOccurrence>() with new ArrayList<>().
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java#L172-L172: Replace new java.util.ArrayList<SymbolOccurrence>() with new ArrayList<>().
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java#L187-L187: Replace new java.util.ArrayList<SymbolOccurrence>() with new ArrayList<>().
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java`
at line 158, Import ArrayList in SymbolOccurrenceRepositoryTest and replace the
fully qualified java.util.ArrayList usages at lines 158, 172, and 187 with
ArrayList using the diamond operator.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java`:
- Around line 106-115: Update deleteAll to group SymbolOccurrence values by
symbol before modifying occurrencesToSymbols, then remove each symbol’s entire
batch in one pass. Add or reuse a batched removal helper analogous to
mergeSorted that filters the existing collection against the grouped
occurrences, preserving single-value and empty-result handling while avoiding
repeated computeIfPresent/remove calls.
- Around line 42-60: Restore the >4096 occurrence fallback for hub symbols in
the single-insert path, especially around insertIntoArray, so repeated updates
stop performing O(n) array copy-on-write. Store oversized symbol occurrence
collections in the established ConcurrentSkipListSet representation while
retaining sorted array storage below the threshold. Update getAllBySymbol and
related mutation paths as needed to support both representations atomically.

---

Nitpick comments:
In
`@src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java`:
- Line 158: Import ArrayList in SymbolOccurrenceRepositoryTest and replace the
fully qualified java.util.ArrayList usages at lines 158, 172, and 187 with
ArrayList using the diamond operator.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c49749f3-e9c1-4b5b-97f6-b743b1f0bd05

📥 Commits

Reviewing files that changed from the base of the PR and between 04e9820 and 5d60697.

📒 Files selected for processing (3)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java

@nixel2007
nixel2007 force-pushed the perf/symbol-occurrence-compact branch from 5d60697 to 4f3a4eb Compare July 15, 2026 08:40

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java`:
- Around line 187-195: Use the boolean result of replacement.add(occurrence) in
the loop over newOccurrences to skip duplicate occurrences before evaluating
stale.remove or adding to newBySymbol. Ensure each unique occurrence is
processed once while preserving the existing batched-save optimization.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 96b6d5f2-fc93-4de7-a164-9a6b7ab35a43

📥 Commits

Reviewing files that changed from the base of the PR and between 5d60697 and 4f3a4eb.

📒 Files selected for processing (3)
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/ReferenceIndex.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/test/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepositoryTest.java
  • src/main/java/com/github/_1c_syntax/bsl/languageserver/references/model/SymbolOccurrenceRepository.java

Заменяет `Map<Symbol, ConcurrentSkipListSet<SymbolOccurrence>>` на
`Map<Symbol, Object>`: сам `SymbolOccurrence` для символа с одним обращением
(доминирующий случай), иначе отсортированный `SymbolOccurrence[]`.
`ConcurrentSkipListSet` на каждый символ — самая расточительная по памяти
коллекция JDK; на cpm (~13k модулей, 5.98M обращений, 1.45M символов) массивы
вместо неё экономят ~375 МиБ реального heap (retained после GC, замер на cpm).

Проблема массива — вставка копированием O(n), накопление по одному дало бы O(n²)
на «хабах». Решается пакетной записью на документ: `ReferenceIndex.replaceReferences`
группирует новые вхождения по символу и зовёт `saveAll` (галопирующий merge,
одно копирование на документ вместо копирования на каждое обращение). `deleteAll`
симметрично батчит удаление по символу. `BatchingSink` уже собирает пачку — бесплатно.

Замер копирований на реальном cpm (инструментированный populateContext, настоящие
последовательности пачек): одиночная запись 3.64e9 копий, пакетная 0.26e9 — в 14×
меньше. При этом время построения индекса одинаковое (populateContext парсинг-bound);
цель — память, по времени не хуже.

`getAllBySymbol` возвращает `Collection` — представление без копирования. Все
изменения атомарны по ключу через compute/computeIfPresent; массив неизменяем.

SymbolOccurrenceRepositoryTest + ReferenceIndexTest + LocationRepositoryTest —
47/47 зелёные.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_017AZeyPcsbdUBaLUGWbhrCi
@nixel2007
nixel2007 force-pushed the perf/symbol-occurrence-compact branch from 4f3a4eb to c11c62f Compare July 15, 2026 10:09
@nixel2007 nixel2007 changed the title perf(references): компактное хранение обращений + пакетная запись (−565 МиБ, копирований в 14× меньше) perf(references): компактное хранение обращений + пакетная запись (−375 МиБ) Jul 15, 2026
@nixel2007
nixel2007 merged commit 4800e23 into develop Jul 15, 2026
33 checks passed
@nixel2007
nixel2007 deleted the perf/symbol-occurrence-compact branch July 15, 2026 10:22
@sonarqubecloud

Copy link
Copy Markdown

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.

1 participant