BeInteractive!

前のエントリの続き。「dynamicクラスだとどうなるんだろう」とamachangさんが言っていたので、調べてみました。っていうか、JIT結果を目で追っただけですけど!

以下、まとめ。

public dynamic class DynamicClass
{
    private var hoge:String = "abc";

    public function DynamicClass()
    {
        fuga = "def";
    }
}

という、hogeというプロパティが静的(この場合"動的"に対する静的)に定義され、fugaというプロパティが動的に定義されたクラスがありますと。

ここで、

var v:String = hoge;

とhogeにアクセスしに行くと、メモリ直読みになります。

var v:String = this["hoge"];

と文字列を介してアクセスしに行くと、ランタイム呼び出しでハッシュ検索になります。

var v:String = fuga;

とfugaにアクセスしに行くと、ランタイム呼び出しでハッシュ検索になります。

var v:String = this["fuga"];

と文字列を介してアクセスしに行くと、ランタイム呼び出しでハッシュ検索になります。

というわけでまとめると、dynamicなクラスだろうがsealedなクラスだろうが、「予め定義されたプロパティ、もしくはローカル変数を普通に(動的ではない方法で)アクセスしに行くとメモリ直読み、それ以外はハッシュ検索」となります。ここテストに出るよ!

この記事へのトラックバック

トラックバックはありません。

TrackBack URL:

http://www.be-interactive.org/trackback.php?id=243

この記事へのコメント

コメントはありません。

コメント書き込み:

カテゴリ

タグ

アーカイブ