【问题标题】:URLConnection getInputStream()/openStream() is slow for the first timeURLConnection getInputStream()/openStream()第一次慢
【发布时间】:2011-04-18 07:36:29
【问题描述】:

Tomcat 服务器(5.5.28) 启动后,我正在执行以下行。

URL  url = new URL("http://localhost:80/servlets/ConnectionCheckServlet");
URLConnection uc = url.openConnection();
long t=System.currentTimeMillis();
//InputStream content = (InputStream)uc.getInputStream();
InputStream content = (InputStream)url.openStream();
System.out.println("Time diff: "+(System.currentTimeMillis()-t));

以毫秒为单位的 Timediff 打印为 Time diff: 5141 (> 5 Seconds)

对于同一个 servlet 或不同 servlet 的后续调用,时间差异实际上小于一秒。

会不会第一次延迟,和Tomcat初始化有关??

【问题讨论】:

    标签: java tomcat


    【解决方案1】:

    我猜这可能是由于第一次访问时可能发生的 servlet 的编译和/或缓存。

    【讨论】:

    • 编译原因:忘了说没有动态编译。 servlet 的缓存:即使我第二次调用不同的 servlet,所花费的时间也以毫秒为单位(不到一秒)
    • 可能没有动态编译,但您仍然需要考虑 JVM 中的动态类加载。我想加载 servlet 类和所有依赖项需要一段时间。如果您发现这种延迟只是第一次发生,那么这无疑是原因。
    • 是的,你是对的。非常感谢。我通过在该时间间隔内以编程方式生成 4 个 Threaddump 来确认它,并确认类加载初始化是在该时间范围内完成的。很抱歉打扰您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多