« エンコード・デコードルーチンの実装(1) | トップページ | エンコード・デコードルーチンの実装(2) »

2016年10月10日 (月)

もやもやオータムズ(オブジェクトの解放に関して)

JavaScript のオブジェクトをメモリから解放したり HTML 要素を削除することに関してモヤモヤしています。オブジェクトをメモリから解放するのには delete を使用し追記1、 HTML 要素を DOM から除去するのには removeChild を使用します。では、次のようなオブジェクトをメモリから解放するにはどうすれば良いでしょうか?


function Diagram(index, code, prev, next){
    ・・・
    this.routeLayer = document.createElementNS(svgns, "g");
    ・・・
}

この Diagram は、その中で HTML 要素 routeLayer を作成しています。 Diagram のインスタンス diagram をメモリから解放するには、単に delete を実行するだけで良いのでしょうか。それとも、先に routeLayerremoveChild しなければならないのでしょうか。モヤモヤしたまま LongDriver を実装しています。

メモリの開放については、まだ疑問が有ります。 foo は何かオブジェクトを指しているとします。その時、


	delete foo

foo を開放するのでしょうか。それとも foo が指しているオブジェクトを開放して foo 自体はメモリに残るのでしょうか追記2

さらにモヤモヤが1つ。上記の diagram が必要無くなった時、 delete を使って解放すべきなのでしょうか。1つのインスタンスを強制的に開放したところで、どれだけのメリットが有るのか疑問です。それよりも、


    diagram = null;

として、後はガベージコレクションに任せた方が良いのではないかと思っています。どうなのでしょうか?

追記1: delete について誤解していたようです。 delete はどんなオブジェクトでも操作対象になるのではないようです。

追記2: プロパティを削除するだけで、参照先を削除するのではない。

« エンコード・デコードルーチンの実装(1) | トップページ | エンコード・デコードルーチンの実装(2) »

フットボールのプレイ図ソフト」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/584699/64324096

この記事へのトラックバック一覧です: もやもやオータムズ(オブジェクトの解放に関して):

« エンコード・デコードルーチンの実装(1) | トップページ | エンコード・デコードルーチンの実装(2) »