最近、64要素を含む配列を宣言すると、65要素を含む同じタイプの配列を宣言するよりもはるかに高速(> 1000倍)であることに気付きました。
これをテストするために使用したコードは次のとおりです。
public class Tests{
public static void main(String args[]){
double start = System.nanoTime();
int job = 100000000;//100 million
for(int i = 0; i < job; i++){
double[] test = new double[64];
}
double end = System.nanoTime();
System.out.println("Total runtime = " + (end-start)/1000000 + " ms");
}
}
これは約6ミリ秒で実行されます。これを置き換えるnew double[64]
とnew double[65]
、約7秒かかります。この問題は、ジョブがますます多くのスレッドに分散している場合に、指数関数的にさらに深刻になります。
この問題は、int[65]
またはなどのさまざまなタイプの配列でも発生しますString[65]
。この問題は大きな文字列では発生しません:String test = "many characters";
に変更すると発生しますString test = i + "";
なぜこれが事実であり、この問題を回避することが可能であるかと思っていました。
System.nanoTime()
も推奨さSystem.currentTimeMillis()
れます。