2011-01-10 2 views
1

パフォーマンスとメモリ使用量の観点から、異なるデータ型の変数を再利用することはできますか?Javascript変数の再利用はありますか?

古いデータはどうなるのですか?タイプキャスト直後にガベージコレクションが行われますか?

+0

あなたは何を意味するの例を挙げることができますか? –

+0

@JW var a = 1; a = {z: '1'} – Ozgur

+0

キャスティングはどこですか?あなたはもう何かをもう一度割り当てているだけです。型は動的な型付けのために重要ではありません。 – delnan

答えて

2

完全な開示:私は、特定のJavaScriptエンジンの内部に関する知識がありません。私は、VMと通訳の一般的な原則から行くつもりです。

通常、変数名は他のメモリ位置を参照します。したがって、古い変数(スコープから外れたときに発生する)を削除して新しい変数を導入するか、現在の内容を新しいオブジェクトに置き換えるかは、メモリ割り当ての点では重要ではありません。

ガベージコレクションは、実装ごとに異なる場合があります。即時ガベージコレクションは困難です。私がそれを行うことを考える唯一の方法は、参照カウンタを必要とし、周期的なデータ構造に対してもその作業を行うのは難しいです。したがって、野生のほとんどのガベージコレクタは、毎回のデータが削除される非即時収集サイクルを実行します。サイクルは、たとえば、メモリ使用量がエンジン内の特定のしきい値を超えると自動的に実行されます(通常はそれよりも洗練されます)。

3

変数を再利用しても問題ありませんが、使用している変数の量に狂ったことを言っていない限り、このようにあまりにもあまりにも余裕を持って再利用するべきではないでしょう。特定のものを指すように宣言された変数を持つことは一般的に良いコーディング方法と考えられ、他のものを参照したいときは別の変数を使用します。

Javascriptの「変数」は単なる参考情報です。彼らは本質的に高価ではありません - 彼らはコード内のテキストよりも多くのスペースを取らず、メモリ内のいくつかのバイトは他の場所を指しています。参照を他のもの(またはnull/undefined)に設定して変数名を再利用すると、GCはその元の参照が切り離されていることを知り、収集できることを認識します。

GCは、使用しているブラウザや環境に関係なく、実際に多くの要因に基づいてコレクタを実際に実行するタイミングを選択します。

2

JavaScriptはゆるく型付けされた言語であり、任意のデータ型を任意の変数(再利用されたものも含む)に格納できます。

タイプを組み合わせている場合は、typeofキーワードを使用して定期的にチェックして、それらがあなたが思っているタイプであることを確認する必要があります(たとえば、文字列に対して数学演算を実行しようとすると、状況について)。

さらに、JavaScript変数は、スコープ内にある限り、周りを囲みます。スコープが残されると、スコープ内の変数は破棄されます(最終的には自動で透過的です)。再割り当てされた変数のガーベジコレクションでは、新しい値が割り当てられるとすぐに古い値が破棄されます。

+0

これはこれまでの唯一の答えで、GCのような操作がどのように行われるかについてのアサーションを作成します。いくつかの参考文献を使用することができました。 – Rondo

関連する問題