最近,我注意到声明包含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 + "";
我想知道为什么会这样,是否有可能规避这个问题。
byte
而不是来运行此代码,则会看到类似的性能差异double
。
System.nanoTime()
应优先System.currentTimeMillis()
选择基准测试。