简单的性能测试,不同的结果

时间:2016-05-23 14:07:31

标签: java performance testing collections

我对收集进行了性能测试,但每次,当我开始测试时,我都有不同的结果。为什么会发生这种情况,我能做些什么才能获得正确的结果?我认为选择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次结果

enter image description here

3 个答案:

答案 0 :(得分:3)

其他答案已经解释了其原因。

处理此问题的最简单方法是运行每个测试x1000并取平均值。您应该发现结果更加一致。

答案 1 :(得分:2)

运行代码之前可用的确切资源量每隔ms就会不断变化。不可能在常规计算机上保持不变。

答案 2 :(得分:1)

jvms在引擎盖下进行优化,运行特定代码的时间越长。你应该看看微工作台标记。为了获得准确的结果,需要做很多事情。