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利用率和此工作负载的性能(以每秒处理的请求数衡量)都得到了显着改善。
看他们的报告:
不,只需启用调试端口就不会影响运行时性能。 至少我从来没有注意到任何。
..
- 具有JAXB Random ClassCastException的Netbeans ..无法转换为com.sun.xml.bind.v2.runtime.reflect.Accessor
- 在java中重启计时器
- 如何将报告导出为PDF / A-1a,PDF / A-1b?
- 如何从jersey servlet中的curl请求中提取参数?
- 如何使用当前时间戳创建随机字符串作为Java中的salt?
- 使用JVisualVM从Java中的远程应用程序获取堆转储
- 将PDF转换为多页tiff(第4组)
- 将messageSource移动到applicationContext会导致默认的messageSource在dispatcher-servlet上下文中不可见
- 转换为超类,并调用Overriden方法
- java.lang.ClassNotFoundException:org.apache.log4j.Level
- 如何在JAVA中将两个或多个tiff图像文件合并到一个多页tiff图像中