回答編集履歴
1
日本語の読みにくさを若干手直し orz
answer
CHANGED
@@ -7,8 +7,8 @@
|
|
7
7
|
|
8
8
|
質問者さんの疑問が「一般的な話はさておいてChromeのjavascriptエンジン(V8?)はどうなっているのか?」であれば残念ながら自分は知らないのでお答えできません。
|
9
9
|
|
10
|
-
GCを持つシステム全般に言える話として捉えさせていただけるなら、誰からも参照されなくなった変数はいつかガベージコレクターに回収されることは保証されているものの正確にいつの時点であるかは一般に予測はできないと思います。少なくとも言語仕様上アクセスできないはずのオブジェクトへの参照がいつまでたっても残るようならばそれはエンジンのバグであることは確かです。よってjavascriptエンジンはおそらく可能な限り速やかに「必要なくなったオブジェクトの参照をしないように」作られているであろうということぐらいしか言えません。
|
10
|
+
GCを持つシステム全般に言える話として捉えさせていただけるなら、「誰からも参照されなくなった変数はいつかガベージコレクターに回収されることは保証されている」ものの、「正確にいつの時点であるかは一般に予測はできない」と思います。少なくとも言語仕様上アクセスできないはずのオブジェクトへの参照がいつまでたっても残るようならばそれはエンジンのバグであることは確かです。よってjavascriptエンジンはおそらく可能な限り速やかに「必要なくなったオブジェクトの参照をしないように」作られているであろうということぐらいしか言えません。
|
11
11
|
|
12
|
-
ところで、Chromeデバッガーの画面を拝見するとスコープから出たにもかかわらず変数の値が見えているという点ちょっと面白く感じました。確かなことは分かりませんが、もし本当にスコープが外れても変数の値を見ることができているなら、デバッガーが実際の値を参照して表示しているのか、かつて存在していた変数の内容のコピーを表示しているにすぎないのか自分にはわかりません。どっちの可能性もあると思いますが、なんとなく前者であるような気はします。もしそうならデバッガーを使わないときに比べ、使っている場合は「本来参照されなくなっている変数値がデバッガーによって参照され続けている」ことを意味するのでそのオブジェクトのガベージコレクターによる回収タイミングは遅延する可能性があるかも知れないなぁと感じました。
|
12
|
+
ところで、Chromeデバッガーの画面を拝見するとスコープから出たにもかかわらず変数の値が見えているという点ちょっと面白く感じました。確かなことは分かりませんが、もし本当にスコープが外れても変数の値を見ることができているなら、「デバッガーが実際の値を参照して表示している」のか、「かつて存在していた変数の内容のコピーを表示しているにすぎない」のか自分にはわかりません。どっちの可能性もあると思いますが、なんとなく前者であるような気はします。もしそうならデバッガーを使わないときに比べ、使っている場合は「本来参照されなくなっている変数値がデバッガーによって参照され続けている」ことを意味するのでそのオブジェクトのガベージコレクターによる回収タイミングは遅延する可能性があるかも知れないなぁと感じました。
|
13
13
|
|
14
14
|
以上は質問者さんを満足させるような回答でない気がしますが、それはともかく、プログラマーが気にすべきより重要な問題は「実際にメモリーが解放されるタイミング」よりは「いつそのオブジェクトを参照がなくせるか」の方だと思います。
|