c49f87382b
Currently the heap snapshot tool uses a regular Set<int> for storing ints between 0 and the number of objects (n). This CL instead introduces a specialized int set backed by a Uint8List where each bit represents a number between 0 and n. This specialized set is then created to fit the number of objects, so even an empty set takes the same amount of space as a full set: about 125 kb per million possible values (or ~6 mb per 50 million). For small sets thats a lot worse than before, but for big sets it's a lot better. Runtime is also a lot better. "Benchmarks" on a snapshot that's ~1.5GB: Runtimes: Before: closure roots (or all after the first one): ~30s, ~19s, ~20s eval and: ~5.5s, ~6.3, ~5.6 eval or: ~7.3s, ~6.5s, ~6.4s eval minus: ~4.5s, ~6.4s, ~6.5s With CL: closure roots (or all after the first one): ~7.7s, ~4.3s, ~4.1s eval and: ~0.2s, ~0.3s, ~0.2s eval or: ~0.6s, ~0.6s, ~0.6s eval minus: ~0.3s, ~0.2s, ~0.3s Memory usage: Before: after loaded: $ grep -E "VmPeak|VmSize|VmRSS" /proc/588700/status VmPeak: 10293036 kB VmSize: 9896880 kB VmRSS: 9260604 kB after all = closure roots VmPeak: 12354840 kB VmSize: 9529612 kB VmRSS: 8898088 kB after 2 x closure all VmPeak: 13068580 kB VmSize: 12478236 kB VmRSS: 11891620 kB after 3 x eval and VmPeak: 18377540 kB VmSize: 18376520 kB VmRSS: 17803032 kB after 3 x eval or VmPeak: 19621712 kB VmSize: 18114376 kB VmRSS: 17491808 kB after 3 x eval minus VmPeak: 21522780 kB VmSize: 21522272 kB VmRSS: 20907724 kB With CL: after loaded: $ grep -E "VmPeak|VmSize|VmRSS" /proc/594718/status VmPeak: 10293560 kB VmSize: 9967036 kB VmRSS: 9323404 kB after all = closure roots VmPeak: 10293560 kB VmSize: 9805272 kB VmRSS: 9137364 kB after 2 x closure all VmPeak: 10868740 kB VmSize: 10867208 kB VmRSS: 10199784 kB after 3 x eval and VmPeak: 10906236 kB VmSize: 10905728 kB VmRSS: 10238424 kB after 3 x eval or VmPeak: 10925496 kB VmSize: 10924988 kB VmRSS: 10257388 kB after 3 x eval minus VmPeak: 10944756 kB VmSize: 10944248 kB VmRSS: 10276672 kB Change-Id: I8d0b65fa51ac2bd4696c4d2782c4423966a7fbae Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324682 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Jens Johansen <jensj@google.com>