Files
sdk/pkg/front_end/tool
Martin Kustermann 3378c55f7d [CFE/Analyzer] Avoid many duplicate strings in analyzer heaps
Right now the analyzer clears out the string canonicalization cache
after each file parse.

Similarly when the analyer serializes various information into
*.{unlinked2,linked,resolved} files & deserializes them again, it will
only have canonicalized strings per unit.

This means that strings that are common across compilation units will
exist many times in the heap, thereby increasing memory consumption of
the process.

This CL tries to avoid that by

  * Using one string canonicalization cache across CFE & Analyzer

  * Making the string canonicalization cache remember how often an entry
    was used

  * Pruning the cache instead of clearing it: We keep the most frequently
    used elements while maintaining a cache that is <= 5 MB.

  * Change analyzer code to use the string canonicalization in various
    places to avoid many duplicate strings in the heap.

When running analyzer on flutter (and it's transitive code), the
analyzer itself has a heap of around 610 MB.

This CL reduces the memory consumed by strings from ~43 MB to ~33 MB
(~ 20 MB are alone dart source files which are unique). We do this at
the expensive of maintaining the string cache, which costs around 2 MB.

That leads to 8 MB of savings.

TEST=ci

Change-Id: Ic28d70492ab0d376e10714c7ecf2c258c790a022
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/255245
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2023-01-25 14:38:23 +00:00
..
2022-02-02 12:20:46 +00:00