我意识到在调试器中运行时Java代码会变慢.
问题是,通过使用以下选项启动Java,代码是否会变慢:
Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n
Run Code Online (Sandbox Code Playgroud)
??
或者只有当您连接到"调试端口"并使用IDE实际执行代码时才会发生减速?
Pas*_*ent 15
首先,严格回答您的问题 - 至少如其标题中所述 - -Xdebug仅在5.0之前的JVM中使用JVMDI 启用VM中的调试支持.因此,它本身并没有做太多.此外,JVMDI是因为5.0不赞成赞成JVMTI:
- Xdebug
从支持JVMDI开始启动.JVMDI已被弃用,不用于J2SE 5.0中的调试,因此在J2SE 5.0中调试不需要此选项.
所以-Xdebug不再做任何事了,重要的是:
-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
Run Code Online (Sandbox Code Playgroud)
或者,从Java 5.0开始,更新(您应该更喜欢,因为5.0中的JDWP代理使用JVM TI接口到VM而不是旧的JVMDI接口):
--agentlib:jdwp=<name1>[=<value1>],<name2>[=<value2>]...
Run Code Online (Sandbox Code Playgroud)
现在,据我所知,只需加载jwdp代理和/或配置JVM以侦听给定端口上的套接字连接就没有任何明显的性能影响.但连接调试器确实如此.
Rob*_*res 11
AMD的性能测试结果表明,通过JVM命令行简单地启用调试代理确实会导致性能下降,无论是否连接了调试器,并且根据工作负载,降级可能会非常大:
请注意,在我们测量性能时,我们实际上并未附加调试器,因此我们假设此agentlib选项在此使用方案中将是性能中立的.当我们删除此选项时,CPU利用率和此工作负载的性能(以每秒处理的请求数衡量)都得到了显着改善.
查看他们的报告: