Q. Javaでの2次元配列の作成において、「多次元配列風の作法」と「ジャグ配列風の作法」とでは、バイトコードに違いは出るのか?
- 多次元配列風の作法 ※正式な用語ではない
int[][] a = new int[3][4];
- ジャグ配列風の作法 ※正式な用語ではない
int[][] a = new int[3][];
a[0] = new int[4];
a[1] = new int[4];
a[2] = new int[4];
- ジャグ配列風の作法 その2
int[][] a = new int[][] {
new int[4],
new int[4],
new int[4]};
A. バイトコードに差異は出る。
Javaの仮想マシンは、「多次元配列作成専用のオペコード」(multianewarray
)を持っている。
したがって、「多次元配列風の作法」の方が、バイトコードがコンパクトになる。
- 調査で使用したJavaコンパイラ
- javac 1.8.0_25 (Oracle)
Javaソースコード | バイトコード |
// 多次元配列風
int[][] a = new int[3][4];
|
ICONST_3
ICONST_4
MULTIANEWARRAY [[I 2
ASTORE 1
|
// ジャグ配列風
int[][] a = new int[3][];
a[0] = new int[4];
a[1] = new int[4];
a[2] = new int[4];
|
ICONST_3
ANEWARRAY [I
ASTORE 1
ALOAD 1
ICONST_0
ICONST_4
NEWARRAY T_INT
AASTORE
ALOAD 1
ICONST_1
ICONST_4
NEWARRAY T_INT
AASTORE
ALOAD 1
ICONST_2
ICONST_4
NEWARRAY T_INT
AASTORE
|
// ジャグ配列風 その2
int[][] a = new int[][] {
new int[4],
new int[4],
new int[4]};
|
ICONST_3
ANEWARRAY [I
DUP
ICONST_0
ICONST_4
NEWARRAY T_INT
AASTORE
DUP
ICONST_1
ICONST_4
NEWARRAY T_INT
AASTORE
DUP
ICONST_2
ICONST_4
NEWARRAY T_INT
AASTORE
ASTORE 1
|
参考リンク
0 件のコメント :
コメントを投稿