相同的java代码,不同的性能?

时间:2013-08-04 13:41:16

标签: java apache network-programming

我正在使用一些小型java程序测试我的自定义Web服务器,但是我得到了一些奇怪的结果。 我的起始代码由两部分组成,即HTTP-GET来自我的Web服务器的相同URL,它们一个接一个地连续放置,结果是每个部分的时间性能。 你可以看到每个部分的一切都是一样的,但第二部分总是有点慢。

我正在循环中测试这两部分中的每一部分,并进行100次迭代并获得平均时间,但第二部分仍然较慢。我想知道为什么会这样?相同的代码,除了执行顺序和不同的性能。 这是我的简单代码:

    long times1 = 0;
    long times2 = 0;

            for(int i = 0;i < 100; i++){
        long startTime = System.nanoTime();
        URL url;
        url = new URL("http://127.o.o.1/i");
        HttpURLConnection http_Con;
        http_Con = (HttpURLConnection)url.openConnection();
        http_Con.setInstanceFollowRedirects(false);
        http_Con.getResponseCode();
        long endTime = System.nanoTime();
        times1 += endTime - startTime;
    }
    System.out.println(times1/100);

    for(int i = 0;i < 100; i++){
        long startTime = System.nanoTime();
        URL url1;
        url1 = new URL("http://127.o.o.1/i");
        HttpURLConnection http_Con1;
        http_Con1 = (HttpURLConnection)url1.openConnection();
        http_Con1.setInstanceFollowRedirects(false);
        http_Con1.getResponseCode();
        long endTime = System.nanoTime();
        times2 += endTime - startTime;
    }
    System.out.println(times2/100);


    if (times1/100 < times2/100)
        System.out.println("times2 is bigger");
    else
        System.out.println("times1 is bigger");
    System.out.println(times2/100-times1/100);
}

OUTPUT1:

32114390812772
32124690872679
times2 is bigger
10300059907

OUTPUT2:

32291342784487
32302050988456
times2 is bigger
10708203969
.
.
.

P.S: 我的网络服务器是Apache基础,我没有对网络或任何与性能相关的部分做任何事情。

1 个答案:

答案 0 :(得分:0)

这绝对是错误的:times1 += endTime + startTime;

你在这里做的是添加endTimestartTime,而实际上只需要区别。这导致了3000年左右的巨大数字。