最近,我注意到声明包含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()选择基准测试。