最近我注意到声明一个包含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");
}
}
如果我将new double[64]
替换为new double[65]
,运行时间将约为7秒,而如果是double[64]
大于约6毫秒。如果任务跨越多个线程,则此问题会成倍加重,这也是我的问题所在。
不同类型的数组(如int[65]
或String[65]
)也会出现此问题。但大型字符串(如String test = "many characters";
)则不会发生此问题,但当将其更改为String test = i + "";
时,问题开始出现。
我想知道为什么会出现这种情况,以及是否可能规避此问题。
System.nanoTime()
而不是System.currentTimeMillis()
。 - rocketboy