Java: CleanJ: オブジェクトと配列ってどちらの方が軽いのだろう?
考えるだけ無駄なような疑問ですが、
class Thunk { Object value; } new Thunk();
と
new Object[1];
はどちらの方が軽いのかということを考えています。
比較ポイントは
- メモリ使用量
- createのコスト
- loadのコスト
- storeのコスト
メモリ使用量はほとんど変わらないと思う(けど、全体のサイズが小さいから、1バイトでも結構大きいと思うけど)
配列の場合
create : 命令長 1 + (1 + 2) = 4 byte
iconst_1 anewarray java/lang/Object
load : 命令長 1 + 1 = 2 byte
iconst_0 aaload
store : 命令長 1 + 1 + 1 = 3 byte
iconst_0 aload_1 ; ローカル変数 1 の要素をスタックに積む aastore
オブジェクトの場合
create : 命令長 (1 + 2) + 1 + (1 + 2) = 7 byte
new Thunk dup invokespecial Thunk/<init>()V
load : 命令長 (1 + 2) = 3 byte
getfield Thunk/value Ljava/lang/Object;
store : 命令長 1 + (1 + 2) = 4 byte
aload_1 ; ローカル変数 1 の要素をスタックに積む putfield Thunk/value Ljava/lang/Object;