前のエントリの続き。「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

コメントはありません。