我对收集进行了性能测试,但每次,当我开始测试时,我都有不同的结果。为什么会发生这种情况,我能做些什么才能获得正确的结果?我认为选择VM的问题。
public class PerformanceTest {
private static void addToTheBeginTest() {
String nameOfMethod = "Method add 250_000 result: ";
List<Integer> arrayList = new ArrayList<>();
StopWatch.start();
for (int i = 0; i < 250_000; i++) {
arrayList.add(0, 1);
}
long resultAL = StopWatch.getElapsedTime();
outputInFile(nameOfMethod, resultAL);
}
private static void outputInFile(String nameOfMethod, long resultAl) {
File outputFile = new File("D:\\Idea Project\\ExperimentalProject\\src\\SimplePerformance\\");
outputFile.mkdir();
try (FileWriter writer = new FileWriter("D:\\Idea Project\\ExperimentalProject\\src\\SimplePerformance\\SimplePerformanceTest.txt", true)) {
writer.write(nameOfMethod);
writer.write(String.valueOf(resultAl) + " mc \n");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
class StopWatch {
private static long result;
public static void start() {
result = System.currentTimeMillis();
}
public static long getElapsedTime() {
return System.currentTimeMillis() - result;
}
}
3次结果
答案 0 :(得分:3)
其他答案已经解释了其原因。
处理此问题的最简单方法是运行每个测试x1000并取平均值。您应该发现结果更加一致。
答案 1 :(得分:2)
运行代码之前可用的确切资源量每隔ms就会不断变化。不可能在常规计算机上保持不变。
答案 2 :(得分:1)
jvms在引擎盖下进行优化,运行特定代码的时间越长。你应该看看微工作台标记。为了获得准确的结果,需要做很多事情。