2013-05-28 9 views
15

では、次の複雑なオブジェクトを考えてみましょう。 object1はもともと取り上げたことオブジェクト参照は余分なメモリを消費しますか?</p> <pre><code>var object1 = .... // (something complexed) </code></pre> <p>これは、あなたのJSアプリケーションでメモリの<code>x</code>量を占める:

var otherObject = { something: true, value: 'yes', object: object1 }; 

var anotherObject = { color: '#FFF', object: object1 }; 

が、私はメモリの量を三倍にしまし:今、あなたはobject1を参照するいくつかの他のオブジェクトを持って言うことができますか?または、object1への参照は、使用されるメモリのオーバーヘッドに追加されませんか?

答えを決定するためにこれを自分自身でテストする方法がわかりません。 (これをベンチマークするのに役立つツールを私に教える方法を教えてくれればボーナスポイント。

+0

よくある質問と思われる –

+2

参照が存在することを示すためにはメモリが必要です。そうでなければ、そこにあるかどうかはどうでしたか? – Joseph

答えて

5

オブジェクトは常にJavaScriptで参照渡しされます(popular answer参照)。オブジェクトへのポインタは、実装に依存していくらかの量のメモリを必要とするが、実際のオブジェクトよりはるかに少ない。

5

this questionをご覧ください。数値、文字列などは常に値で呼び出されますが、オブジェクトはcalled by sharingです。つまり、値によって呼び出されますが、値はオブジェクトへの参照です。

つまり、ポインタのプロパティを変更すると、オブジェクトと同じメモリプールが変更されます。しかし、ポインタを再割り当てしても元のオブジェクトには影響しません。これが意味することはあなたの例では、あなたがないを持っている、ということである

object1は、取り上げたしかしobject1への余分なポインタが一部メモリ空間を占有することをメモリの量を三倍。正確にどれくらいのスペース?それはJavascriptエンジンの正確な実装に依存しますが、オブジェクトのサイズよりもずっと小さくなります。

ベンチマークは、MozillaのJSエンジンのドキュメントSpiderMonkeyを参照してください。そこには良いユーティリティがたくさんあります....

関連する問題

 関連する問題