Hash Benchmark for mruby

GitHub

Memory Usage

Hash サイズごとのメモリー使用量 (mrb_mallocmrb_realloc に実際に指定した値) の計測結果です (struct RVALUE のサイズは含みません)。

64-bit Word-boxing
64-bit NaN-boxing
64-bit No-boxing
32-bit Word-boxing
32-bit No-boxing
Hash Size: --
Baseline:
--
kB
New:
--
kB
Factor:
--
times
Entry List Expansion
Hash Buckets Expansion
Drag and drop to zoom in (double-click resets)

ハッシュバケット拡大時のメモリー使用量の増加量が、New 実装は Baseline 実装と比較してかなり少なくハッシュバケットが小さいことが良く分かります。

boxing とハッシュテーブルの有無による関係は概ね以下のようになっています。

boxing ハッシュテーブル メモリー使用量
あり なし 0.55倍-0.75倍
あり あり 0.50倍-0.75倍
なし なし 0.70倍-0.95倍
なし あり 0.70倍-0.95倍

boxing ありのほうが削減率が大きくなっています。これは、今回削減対象となっているハッシュバケットや管理情報のメモリー使用量が、Hash オブジェクト全体のメモリー使用量に対して割合が大きいためです。

なお、空のハッシュは mrb_hash_new で作成しているため、両実装とも初期メモリー使用量が0になっていますが、Baseline 実装では Hash.new や空のハッシュリテラルで作成した場合は0になりません。