初めまして!ノベルワークスでエンジニアをしている、入社3年目のそうまです!
今回は、ブラウザごとのヒープメモリの使える量の違いについて調べた内容をまとめました!!
調査理由
少し前、ブラウザ上で大量のメモリを使う処理を書くことがありました。
実際には「処理方法が悪かっただけ」で、想定よりメモリ使用量は少なかったのですが、そのとき「Chromeだと落ちるけど、Safariは落ちない」みたいな現象が発生していました。
「これってブラウザごとに使えるメモリ量が違うのでは?」と気になり、
正直いつ使うか分からないけど、調べてみることにしました!
ヒープメモリ
プログラムの実行中に動的に確保・解放が可能なメモリ領域の事を指す。
調査結果
※ あくまで目安です。
ブラウザ | 32ビットOS上の制限 | 64ビットOS上の制限 |
---|---|---|
Chrome | 約700MB | 約1400MB |
Edge | 約700MB | 約1400MB |
Firefox | 約512MB | 約2GB |
Safari | 環境依存 | 環境依存 |
ChromeやEdgeは、どちらもJavaScriptの実行エンジンにV8を採用しています。
このV8エンジンの仕様として、デフォルトのヒープメモリ制限が以下のように設定されています:
- 32ビットOS:約700MB
- 64ビットOS:約1400MB
そのため、両者のヒープメモリ上限はほぼ同じになります。
一方、Safariに関しては公式にメモリ制限が公開されておらず、正確な数値は不明です....。
ただ、実際の検証中に「Safariだけ落ちなかった」という場面もあったため、独自のメモリ管理手法や、より緩やかな制限が設けられている可能性がありそうです。
以下参考
Chrome と Edge
余談ですが、なぜ両者が同じJavaScript実行エンジンであるV8を採用しているのかは理由があるそうです。
この二つのブラウザは、Googleが開発するオープンソースソフトウェア「Chromium」を基盤として開発されているそうです。
「Chromium」は、レンダリングエンジンの「Blink」や、JavaScriptの実行エンジンである「V8」などを内包した、ブラウザのベースとなるプロジェクトです。
この「Chromium」を土台にしているため、Chrome も Edge もどちらもV8を使っている、というわけです。
纏め
正確な情報が公開されていないブラウザもあり、完全には把握できなかったものの、ブラウザによってヒープメモリの使える量にそこそこ違いがあるということは分かりました!!