猿问

为什么在 Java 中调试(跨步)时 https 连接如此缓慢?

我正在尝试调试我的 Java 代码的一些问题,该代码建立了 http/https 连接。我想知道为什么在调试时连接会变得非常慢(下载一个小网页超过一分钟),即使是在跨过网络工作的方法时也是如此。如果有一些补救措施。


下面我发布了一个示例(您可以更改https:为http:,并尝试从 Eclipse 按下调试它F11- 对于单步执行,在第一个main()语句中放置一个断点,并F6在它在那里暂停时按下。


我的结果(以毫秒为单位的时间):


                        conn time   total time

http  (not stepping)        60           350

http  (stepping over)     1100          1500

https (not stepping)       570          1300

https (stepping over)    21000         83000

编辑:停用后,Show method result after a step operation选项(通过howlger的回答恰如其分地提出补救措施),时代变多更加合理(约十分之一用于HTTPS)。


http  (stepping over 2)     150           450

https (stepping over 2)    2000          7000

我的场景:Java 8 (1.8.0_121-b13),64 位,Win-7,Eclipse Photon(也体验过 Oxygen)。


import java.io.*;

import java.net.*;

import java.nio.charset.StandardCharsets;


public class TestConn {


    public static void downloadFromUrl(final URL url) throws IOException {

        long t0 = System.currentTimeMillis();

        URLConnection conn = url.openConnection();

        System.out.println("conn msecs: " +

              (System.currentTimeMillis() - t0) + " url=" + url);

        System.out.println("=====================================");

        try (BufferedReader in = new BufferedReader(

                new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {

            String line;

            int cont = 0;

            while ((line = in.readLine()) != null) {

                if (cont++ < 4)

                    System.out.println(line);

            } 

            if(cont >=4) 

                System.out.printf("== total lines: %d (%d skipped)\n",cont,cont-4);

            System.out.println("==============done=======================");

        } 

    }


狐的传说
浏览 284回答 1
1回答

海绵宝宝撒

这就是为什么在Window > Preferences: Java > Debug 中有首选项Show method result after a step operation (如果 VM 支持;可能很慢)。
随时随地看视频慕课网APP

相关分类

Java
我要回答