はじめに
Javaの速度を調べてみました。iはint型です。
代入先に書いてある型名は、代入した時の変数の型。
速度を表す値の単位は気にしないでください。相対的に見ていく感じでお願いします。
環境
Intel(R) Pentium(R) 4 CPU 3.00GHz 0.99GB RAM
WindowsXP SP3 Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
足し算
int = 1 + i;
90895
int = 10 + i;
201073
long = 1l + i;
267193
long = 10l + i;
268799
float = 1f + i;
306602
double = 1.0 + i;
369100
掛け算
int = 1 * i;
225763
long = 10l * i;
526616
float = 1.0f * i;
369038
double = 1.0 * i;
435841
割り算
int = 1 / i;
1455367
long = 1l / i;
6347530
float = 1.0f / i;
1070948
double = 1.0 / i;
1338557
ビットシフト
int = i >> 1;
271325
int = i << 1;
271606
nd = i >>> 1;
271403
条件文
if(int>-1);
100823
if(int>-1) int++;
268338
if(long>-1) long++;
552858
if(float>-1.0) float++;
334916
if(double>-1.0) double++;
277108
型変換と代入
int = i;
98752
long = i;
202061
float = i;
168658
double = i;
164801
その他
r = d1[i];
g = d2[i];
b = d3[i];
675400
r = (d1[i] >> 16) & 0xff;
g = (d1[i] >> 8) & 0xff;
b = d1[i] & 0xff;
404430
ni = d1[i];
r = (ni >> 16) & 0xff;
g = (ni >> 8) & 0xff;
b = ni & 0xff;
404083
コメント
ndって何ですか><それに足し算乗除でintを除くそれぞれについて型変換が発生しているような。。。
おお。ndとか直しました。はい。型変換発生しています。longが遅いのと、doubleよりfloatのが早いってのと、rgbをまとめてビットシフトで管理した方が早いってのに驚きました。最近のCPUで誰か試した結果教えてください><