C/C++でプログラミングを学んだので、Javascriptでのメモリ管理は決して直感的ではありません。Javascriptでのメモリ管理
私はすべての変数がスタックメモリではなくヒープメモリにあることを知っています。そのため、メモリ操作は非常に高価です。変数へのすべての参照にアクセスできない場合は、ガベージコレクトすることができますが、V8ではすぐにガベージコレクションが行われないように見えますか? (--trace_gc
で観測)
グローバルアレイオブジェクトのメモリを解放するには、これはarray = null
で実行できます。array = []
は同じ効果がありますか? (私はそれをクリアした後でも配列のように動作する変数が必要です)。
私の経験から、String
とNumber
は値によって関数に渡され、Object
とArray
は参照によって関数に渡されます。 String
が非常に大きく、関数が実際に参照によって安全に渡すことができる場合(文字列の読み取りのみ)、V8はそのように最適化しますか?
ES6はブロックスコープの宣言にlet
キーワードを紹介しますが、let
の単独使用は全体の機能が遅くなりますので、私はまだlet/const
私は精通していますC/C++に近いにもかかわらずvar
に固執します。 (d8
をマスタブランチから構築してテストしましたが、V8開発者がこのバグに積極的に取り組んでいることを認識しています)。
Chrome DevToolsを使用してコードのメモリ管理を学習しようとしましたが、プロファイラのグラフやグラフが実際に意味するものを特定できませんでした。
迷惑メールをしないでください。あなたの質問は、たとえあなたがそれをcompatisonとして使うとしても、C++とは何の関係もありません。 – StoryTeller
JSのメモリをあまり心配する必要はありません。ブラウザで処理してください。 – Cerbrus
私はあなたが時期尚早に最適化しようとしているかもしれないと聞きます。この場合に該当するかどうかを確認するには、こちらの便利なチャートを参照してください(https://xkcd.com/1691/)。 – vlaz