Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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_Apache_Network Programming - Fatal编程技术网

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

相同的java代码,不同的性能?,java,apache,network-programming,Java,Apache,Network Programming,我正在用一些小java程序测试我的定制web服务器,但我得到了一些奇怪的结果。 我的起始代码由两部分组成,HTTP-GET从我的web服务器获取相同的URL,这两部分依次放置,结果是每个部分的时间性能。 正如你所看到的,每个部分都是一样的,但是第二部分总是有点慢 我在一个循环中测试这两部分,每次迭代100次,得到平均时间,但第二部分仍然较慢。我想知道为什么会这样?除了执行顺序和不同的性能外,代码相同。 以下是我的简单代码: long times1 = 0; long times2

我正在用一些小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);
}
输出2:

32291342784487
32302050988456
times2 is bigger
10708203969
.
.
.
附言:
我的web服务器是Apache base,我没有对网络或其任何与性能相关的部分做任何处理。

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


这里要做的是添加
endTime
startTime
,而实际上只需要差异。这造成了3000年左右的巨大数量。

有时服务器陷入全面休眠并唤醒它们需要时间,这是从静止状态开始的,需要进行更多查询。您可以尝试
HttpURLConnection.disconnect()
然后检查是否只是资源分配问题导致您的性能不同我纠正了这一点,谢谢,但这与最终结果无关通过此更改获得的新输出是什么?每次测试的时间2仍然更大1875618 69335472时间2更大67459854我建议您停止使用纳米时间并开始使用秒表
。这门课就是为了这个。如果你的发现仍然不寻常,用它们编辑你的文章。
32291342784487
32302050988456
times2 is bigger
10708203969
.
.
.