2014年3月22日土曜日

Javaでメンバ変数のアクセス速度を方法ごとに調べた

■背景
Python、JavaScriptのオブジェクトやRubyのostructのように、汎用的にメンバ変数を追加できるオブジェクトをつくろうと思ったが、リアルタイム性も必要とされるため、メンバ変数の取得が方法によってどれくらい違うのかざっくり調べようと思った。

■方法
①メンバ変数直接参照
 obj.memberA;
 obj.memberB;
 obj.memberC;

②Getterを使用
 obj.getMemberA();
 obj.getMemberB();
 obj.getMemberC();

③TreeMap+アクセサ
 メンバ変数の代わりにTreeMapをメンバ変数に一つもつ。
 そのMapにメンバ変数を複数登録する
 obj.getMember().get("MemberA");
 obj.getMember().get("MemberB");
 obj.getMember().get("MemberC");

■調査方法
String、Int、Double型のメンバ変数3つに100,000回アクセス

■結果
メンバ変数を直接参照:1倍
Getterを使用:1.2倍
Map+アクセサ:3.5倍
Map+アクセサ(Mapのサイズを3倍に):3.6倍


0 件のコメント:

コメントを投稿