为什么在Java中调试(单步切换)时https连接如此缓慢?
我试图调试我的Java代码中的一些问题,它建立了http/https连接。我想知道为什么调试时连接速度会慢得离谱(下载一个小网页需要一分钟以上),即使是跨过网络工作的方法。如果有什么补救办法 下面我发布了一个示例(您可以将为什么在Java中调试(单步切换)时https连接如此缓慢?,java,eclipse,debugging,networking,Java,Eclipse,Debugging,Networking,我试图调试我的Java代码中的一些问题,它建立了http/https连接。我想知道为什么调试时连接速度会慢得离谱(下载一个小网页需要一分钟以上),即使是跨过网络工作的方法。如果有什么补救办法 下面我发布了一个示例(您可以将https:更改为http:,并尝试在Eclipse中按F11)调试此操作-对于单步执行,在第一个main()语句中放置一个断点,并在其暂停时按F6 我的结果(以毫秒为单位的时间): 编辑:在禁用步骤操作后显示方法结果选项(霍尔格的答案恰当地建议了补救方法)后,时间变得更加合
https:
更改为http:
,并尝试在Eclipse中按F11
)调试此操作-对于单步执行,在第一个main()
语句中放置一个断点,并在其暂停时按F6
我的结果(以毫秒为单位的时间):
编辑:在禁用
步骤操作后显示方法结果
选项(霍尔格的答案恰当地建议了补救方法)后,时间变得更加合理(https大约为十分之一)
我的场景:Java8(1.8.0_121-b13),64位,Win-7,Eclipse光子(也有氧气体验)
import java.io.*;
导入java.net。*;
导入java.nio.charset.StandardCharset;
公共类TestConn{
公共静态void downloadFromUrl(最终URL)引发IOException{
长t0=System.currentTimeMillis();
URLConnection conn=url.openConnection();
System.out.println(“连接毫秒:”+
(System.currentTimeMillis()-t0)+“url=“+url”);
System.out.println(“======================================================================”);
try(BufferedReader in=新的BufferedReader(
新的InputStreamReader(conn.getInputStream(),StandardCharsets.UTF_8))){
弦线;
int cont=0;
而((line=in.readLine())!=null){
if(cont++<4)
系统输出打印项次(行);
}
如果(续>=4)
System.out.printf(“==行总数:%d(%d跳过)\n”,续,续-4);
System.out.println(“===============================================================================”);
}
}
公共静态void testConn(字符串URL){
试一试{
长t0=System.currentTimeMillis();
下载自URL(新URL(URL));
System.out.println(“完成,总时间毫秒:”+
(System.currentTimeMillis()-t0));
}捕获(IOE异常){
e、 printStackTrace();
}
}
公共静态void main(字符串[]args)引发异常{
测试控制(“https://www.example.com/“”;//此处为断点,用F6跳过
System.out.println(“再见”);
}
}
这就是为什么在窗口>首选项:Java>调试中有首选项在步骤操作后显示方法结果(如果VM支持;可能很慢)
自Eclipse 2018-09(4.9)以来,可以设置超时(默认为7秒):
conn time total time
http (not stepping) 60 350
http (stepping over) 1100 1500
https (not stepping) 570 1300
https (stepping over) 21000 83000
http (stepping over 2) 150 450
https (stepping over 2) 2000 7000
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=======================");
}
}
public static void testConn(String urls) {
try {
long t0 = System.currentTimeMillis();
downloadFromUrl(new URL(urls));
System.out.println("Done , total time msecs: " +
(System.currentTimeMillis() - t0));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
testConn("https://www.example.com/"); // breakpoint here, step-over with F6
System.out.println("bye");
}
}