Java应用程序是否会因为-Xdebug的存在而减慢或仅在单步执行代码时减速?

我意识到在调试器中运行时Java代码会变慢 。

问题是,通过使用以下选项启动Java,代码是否会变慢:

Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n 

??

或者只有当您连接到“调试端口”并使用IDE实际执行代码时才会发生减速?

首先,要严格回答您的问题 – 至少如其标题中所述 – -Xdebug允许在 5.0之前的JVM中使用JVMDI在VM中调试支持 。 因此,它本身并没有做太多。 此外, 自5.0以来 ,JVMDI 不推荐使用 JVMTI :

Xdebug
首先启用对JVMDI的支持。 JVMDI已被弃用,不用于J2SE 5.0中的调试,因此J2SE 5.0中的调试不需要此选项。

所以-Xdebug不再做任何事了,重要的是:

 -Xrunjdwp:[=],[=]... 

或者,从Java 5.0开始,更新(您应该更喜欢,因为5.0中的JDWP代理使用JVM TI接口到VM而不是旧的JVMDI接口):

 --agentlib:jdwp=[=],[=]... 

现在,据我所知,只需加载jwdp代理和/或配置JVM以侦听给定端口上的套接字连接就没有任何明显的性能影响。 但是连接调试器可以。

AMD的性能测试结果表明,通过JVM命令行简单地启用调试代理确实会导致性能下降,无论是否连接了调试器,并且根据工作负载,降级可能会非常大:

请注意,在测量性能时,我们实际上并未附加调试器,因此我们假设此agentlib选项在此使用方案中将是性能中立的。 删除此选项后,CPU利用率和此工作负载的性能(以每秒处理的请求数衡量)都得到了显着改善。

看他们的报告:

http://developer.amd.com/resources/documentation-articles/articles-whitepapers/java-performance-when-debugging-is-enabled/

不,只需启用调试端口就不会影响运行时性能。 至少我从来没有注意到任何。

..