Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中可靠地测试执行时间_Java_Performance - Fatal编程技术网

在Java中可靠地测试执行时间

在Java中可靠地测试执行时间,java,performance,Java,Performance,我目前正在用Java测试使用自定义类或int数组作为数据类型是否更快,并为此目的运行了速度测试(见下文) int重复次数=100000000; 对于(int i=0;i

我目前正在用Java测试使用自定义类或int数组作为数据类型是否更快,并为此目的运行了速度测试(见下文)

int重复次数=100000000;
对于(int i=0;i<重复*10;i++){
移动3=新移动(2,3);
int sum3=move3.x+move3.y;
}
//对象块
长启动=System.nanoTime();
for(int i=0;i<重复;i++){
移动2=新移动(2,3);
int sum2=move2.x+move2.y;
}
System.out.println(“对象获取”+(System.nanoTime()-start)+“ns”);
//阵列块
long start2=System.nanoTime();
for(int i=0;i<重复;i++){
int[]move=newint[]{2,3};
整数和=移动[0]+移动[1];
}
System.out.println(“数组take”+(System.nanoTime()-start2)+“ns”);
围绕计时块交换基本上决定了什么更快。这原本是4倍,但事先运行无意义的第一个块将其减少到1.1倍左右。为什么会这样?JVM是否有“预热期”?我怎样才能完全摆脱这个问题呢


(我知道,我可以从交换改变了优势这一事实中获得所有与性能相关的信息,但我很好奇这里发生了什么。)

实际上是JVM的预热。尝试查看。

第一个块可能会影响您的比较,因为您通过在循环中创建新对象为分配了大量内存。。。我将你的重复变量更改为2000000000,因子变为1.1左右(没有第一个块),你可以尝试在第一个块中不创建任何对象…@wenzi更多的重复和移除第一个块不会有太大变化,它仍然是一个2-3左右的因子。可能是硬件相关的问题?我甚至多次运行Integer.MAX_值,它仍然是一个因子1.8如果我使用Integer.MAX_值,这是最接近的结果:对象使用149577664ns数组使用1463381341ns(没有第一个块)好的,我不知道为什么它不同,但感谢您确认实际上没有实时差异!当然阵列似乎更高效一些。。。也许您可以尝试清理项目或重新启动jvm?不是这方面的专家,但这篇文章很有趣