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

Mar*_*eon 22 java debugging

我意识到在调试器中运行时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以侦听给定端口上的套接字连接就没有任何明显的性能影响.但连接调试器确实如此.

  • 即使在不附加调试器的情况下加载 jwdp 代理 [可能会降低性能](http://developer.amd.com/resources/documentation-articles/articles-whitepapers/java-performance-when-debugging-is-enabled/) . (2认同)

Rob*_*res 11

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

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

查看他们的报告:

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