Java 为什么通过超文本传输协议首次访问速度慢
我正在研究通过http1.0内部局域网的访问时间。 我将http服务器设置为127.0.0.1:30000,并允许curl访问服务器。 (http服务器代码在上实现 这是一个非常简单的程序。) 旋度-I-0“http://127.0.0.1:30000/" 有趣的是,只有第一次访问需要很长时间。 第一次访问大约需要5.0毫秒,但第二次访问需要0.7毫秒。 以下访问只需不到1毫秒 我用WireShark偷看了一下包,发现 从服务器占用[PSH,ACK]数据包的几乎所需时间。 为什么会出现这样的差异 (我怀疑持续连接会使第二次访问变快。 但是,我在http1.0环境下进行了实验,Java 为什么通过超文本传输协议首次访问速度慢,java,http,networking,tcp,packet,Java,Http,Networking,Tcp,Packet,我正在研究通过http1.0内部局域网的访问时间。 我将http服务器设置为127.0.0.1:30000,并允许curl访问服务器。 (http服务器代码在上实现 这是一个非常简单的程序。) 旋度-I-0“http://127.0.0.1:30000/" 有趣的是,只有第一次访问需要很长时间。 第一次访问大约需要5.0毫秒,但第二次访问需要0.7毫秒。 以下访问只需不到1毫秒 我用WireShark偷看了一下包,发现 从服务器占用[PSH,ACK]数据包的几乎所需时间。 为什么会出现这样的差异
持久连接是在http1.1中定义的)大多数事情在Java上第一次速度较慢,之后速度相当快。一个重要原因是JIT。尝试在服务器虚拟机中运行服务器(使用
java-server
)。我尝试了-server选项,但运行时间变化不大-Xint选项是相同的。虽然我用C语言实现了http服务器并进行了测量。每次经过的时间都不到1.0毫秒!所以,我认为这个问题取决于Java语言,但JIT(字节码缓存?)与这个度量中的数据无关。嗯,这很奇怪。@Gilbertotorezan:JIT通常比第二次更快。更像是第501次。@JBNizet,这取决于VM的实现。您可能正在谈论客户机热点(Oracle)VM。但是有很多虚拟机,它们之间有几个显著的差异,主要是在JIT编译方面。